利用pandas将非数值数据转换成数值的方式

作者:可以调素琴 时间:2023-05-18 15:17:17 

handle non numerical data

举个例子,将性别属性男女转换成0-1,精通ML的小老弟们可以略过本文~~,

这里不考虑稀疏向量的使用,仅提供一些思路。本来想直接利用pandas的DataFrame.iloc加上for循环直接转换,但试过一遍之后,原数据并有改变。。。。蛋疼写了一个比较 菜的函数,如下。


# 非数值列处理函数
def handel_non_numerical_data(df,name): #----------------name是需要处理的列名称(str),暂不考虑列表
nrows = len(df[name])  #----------------数据集的行数
old_col = df.columns.tolist() #----------------初始的列名集合
name_index = old_col.index(name) #---------要处理的列的在数据集中的索引值
name_data = df[name].values.tolist()#-----------将要处理烦人列复制成一个列表
df.drop([name],axis =1,inplace =True)
unique_kinds = set(name_data)
convert_dict = {}; x = 0   #构造对应种类数值转化字典
for i in unique_kinds:
convert_dict[i] = x
x += 1
def convert(val):
return convert_dict[val]
name_data = list(map(convert,name_data))#利用map函数直接迭代转化

new_col = df.columns.tolist()
new_col.insert(name_index,name)
df.reindex(columns = new_col) #----------------重构数据的列
df[name] = name_data

跑了一遍没有出错,注意这只是baseline…,如果对数值有要求的话,需要自行改动

原本是想直接用youtube上sentdex老哥ml35期视频里的代码的,但发现了几个较为严重的bug,而且总是运行出错 ,如下


def handle_non_numerical_data(df):
columns = df.columns.values
for column in columns:
text_digit_vals = {}
def convert_to_int(val):
 return text_digit_vals[val]
if df[column].dtype != np.int64 and df[column].dtype != np.float64:
 column_content = df[column].values.tolist()
 unique_elements = set(column_content)
 print(unique_elements)
 x =0
 for unique in unique_elements:
 if unique not in text_digit_vals:
  text_digit_vals[unique] = x
  x+=1
df[column] = list(map(convert_to_int,df[column]))

可见,非常暴力,注意到他的if条件,有的数据集中会出现字母数字组合的情况【会出现dtype=object的情况】,set之后种类会草鸡多…,这样的话数值转换也就失去了意义【当然,如果你的样本量是亿级的,几千几百个种类无所谓我也无fuck说,这种情况我认为必须使用稀疏向量了】,另外这个代码一直报错,不知道为什么,有兴趣的老哥可以复制跑一下帮我解答一下。。。

---------------------------2019-08-21分割:

https://www.kaggle.com/nroman/recursive-feature-elimination

LabelEncoder方法

from sklearn.preprocessing import LabelEncoder

利用pandas将非数值数据转换成数值的方式

注:tqdm是进度条库,不需要关注。另外没有去看这个接口的源码,应该也是最简单的one-hot

来源:https://blog.csdn.net/NewDreamstyle/article/details/90515220

标签:pandas,非数值,数据,数值
0
投稿

猜你喜欢

  • MySQL SQL预处理(Prepared)的语法实例与注意事项

    2024-01-14 17:50:09
  • Python 完美解决 Import “模块“ could not be resolved ...的问题

    2022-04-05 18:59:29
  • 符合语言习惯的 Python 优雅编程技巧【推荐】

    2022-07-07 10:43:40
  • MySQL基于索引的压力测试的实现

    2024-01-19 05:56:23
  • Python利用tkinter实现一个简易番茄钟的示例代码

    2021-03-02 17:20:59
  • 精心整理总结的Python自动化测试面试题

    2022-07-27 08:13:00
  • py-charm延长试用期限实例

    2023-03-05 23:00:42
  • python数据结构链表之单向链表(实例讲解)

    2021-01-17 12:51:19
  • pytorch 两个GPU同时训练的解决方案

    2023-07-04 11:03:55
  • 使用Anaconda3建立虚拟独立的python2.7环境方法

    2023-10-01 20:10:43
  • mysql从执行.sql文件时处理换行的问题

    2009-09-06 11:46:00
  • CSS实现DIV完美垂直居中(支持多浏览器)

    2007-08-13 09:21:00
  • 详解phpMyAdmin的安装和配置

    2007-06-15 09:56:00
  • 浅谈Keras的Sequential与PyTorch的Sequential的区别

    2021-08-24 07:53:35
  • 详解Python+OpenCV实现图像二值化

    2022-01-02 13:08:07
  • 浅谈如何提高PHP代码的质量

    2024-06-05 09:47:05
  • python编程学习np.float 被删除的问题解析

    2021-10-26 23:43:17
  • python BeautifulSoup库的安装与使用

    2022-06-22 17:01:04
  • JavaScript字典与集合详解

    2024-04-16 09:28:13
  • python 中字典嵌套列表的方法

    2022-05-17 04:54:15
  • asp之家 网络编程 m.aspxhome.com