首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用python将列文本数据转换为要素以用于机器学习

使用python将列文本数据转换为要素以用于机器学习
EN

Stack Overflow用户
提问于 2019-05-02 01:20:40
回答 2查看 1.2K关注 0票数 5

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

我如何使用python来做这件事?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-02 03:09:43

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

这是我的解决方案!

代码语言:javascript
复制
>>> 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

票数 5
EN

Stack Overflow用户

发布于 2019-05-02 01:45:13

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

代码语言:javascript
复制
   df = pd.read_csv("data.csv")

然后将应用程序列中的数据放入列表中。然后获取列表并将其连接到一个字符串中,然后在";“分隔符处将其拆分。

代码语言:javascript
复制
   col = list(df.application)
   col_join = ";".join(col)
   col_split = col_join.split(";")

在你有了这个列表之后,你可以遍历和删除重复的内容...

代码语言:javascript
复制
   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

现在,您有了一个列表,其中包含所有唯一的应用程序条目,您可以将这些条目读入数据框中作为列使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55940040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档