使用 python 将列文本数据转换为特征以用于机器学习

Posted

技术标签:

【中文标题】使用 python 将列文本数据转换为特征以用于机器学习【英文标题】:Convert column text data into features using python to use for machine learning 【发布时间】:2019-09-20 05:50:12 【问题描述】:

左侧 CSV 文件有五列 .application 列有几个应用类型,用 ; 分隔。根据appdevicedistrict 类型,我想预测target。但我想先将文件转换为右侧数据框以应用机器学习。

如何使用 python 做到这一点?

【问题讨论】:

右边表格的值是从哪里来的?如果它来自单独的 CSV 文件,您可以创建一个空数据框,然后将值读入它们各自的列中。 How can I one hot encode in Python?的可能重复 右侧表值取自 Hive sql 表。我有一个单独的 csv 文件。 【参考方案1】:

您可以先按原样读取 csv,然后进行所有编辑。所以首先..

   df = pd.read_csv("data.csv")

然后将应用列中的数据放入列表中。然后取出列表并将其加入一个字符串并在“;”处将其拆分回来分隔符。

   col = list(df.application)
   col_join = ";".join(col)
   col_split = col_join.split(";")

获得该列表后,您可以遍历并删除重复项...

   i=0
   while i < len(col_split):
      j=i+1
      while j < len(col_split):
           if col_split[i] == col_split[j]:
               del(col_split[j])
      else:
        j += 1
    i += 1

现在您有了所有唯一应用程序条目的列表,您可以将它们读入数据框以用作列。

【讨论】:

非常感谢米切尔。但这里的问题是我不知道一列中有多少功能。上表只是显示格式的示例。 CV 有超过 10K 行,包含多种应用类型。 @CharithEllepola 我已经编辑了我的帖子,我相信这就是你要找的。​​span> 【参考方案2】:

您需要为application 列应用多热编码,并为其他列应用一种热编码。

这是我的解决方案!

>>> import pandas as pd
>>> import numpy as np

>>> df = pd.DataFrame('number': np.random.randint(0,10,size=5),
                  'device': np.random.choice(['a','b'],size=5),
                  'application': ['app2;app3','app1','app2;app4', 'app1;app2', 'app1'],
                  'district': np.random.choice(['aa', 'bb', 'cc'],size=5))

>>> df

    application device  district    number
0   app2;app3   b         aa    3
1   app1        a         cc    7
2   app2;app4   a         aa    3
3   app1;app2   b         bb    9
4   app1        a         cc    4

from sklearn.preprocessing import OneHotEncoder, MultiLabelBinarizer

mlb = MultiLabelBinarizer()
# Assuming appl names are separated by ;
mhv = mlb.fit_transform(df['application'].apply(lambda x: set(x.split(';'))))
df_out = pd.DataFrame(mhv,columns=mlb.classes_)

enc = OneHotEncoder(sparse=False)
ohe_vars = ['device','district'] # specify the list of columns here
ohv = enc.fit_transform(df.loc[:,ohe_vars])
ohe_col_names = ['%s_%s'%(var,cat) for var,cats in zip(ohe_vars, enc.categories_) for cat in cats]

df_out.assign(**dict(zip(ohe_col_names,ohv.T)))

df_out

【讨论】:

嗨,当我运行上述代码时,我只得到应用列

以上是关于使用 python 将列文本数据转换为特征以用于机器学习的主要内容,如果未能解决你的问题,请参考以下文章

将列中的所有文本转换为 MySql 中的驼峰式大小写

通过分隔符将列文本拆分为R中的多个不同列

如何将列转换为向量类型?

零基础学Python--机器学习:特征提取

Pandas 数据框无法将列数据类型从对象转换为字符串以进行进一步操作

Python/Pandas - 性能改进 - 将列分成多个部分并将字符串序列转换为列表