python - 熊猫为带有列表的列获取假人
问题描述
输入:-
empNo name
1234 [ AB, DE ]
5678 [ FG, IJ ]
命令:-
dataFrame = dataFrame.join(dataFrame.name.str.join('|').str.get_dummies().add_prefix('dummy_name_'))
上面的命令带来了 dummy “for each character of the column name”
输出:-
empNo name dummy_name_A dummy_name_B dummy_name_D dummy_name_E dummy_name_F dummy_name_G dummy_name_I dummy_name_J
1234 [ AB, DE ] 1 1 1 1 0 0 0 0
5678 [ FG, IJ ] 0 0 0 0 1 1 1 1
预期的:-
empNo name dummy_name_AB dummy_name_DE dummy_name_FG dummy_name_IJ
1234 [ AB, DE ] 1 1 0 0
5678 [ FG, IJ ] 0 0 1 1
解决方案
我认为列表不是列表,所以我们使用 ast 将字符串类型列转换回列表
import ast
df.name=df.name.apply(ast.literal_eval)
然后使用 strget_dummies
s=df.name.apply(pd.Series).stack().str.get_dummies().sum(level=0).add_prefix('dummy_name_')
s
dummy_name_AB dummy_name_DE dummy_name_FG dummy_name_IJ
0 1 1 0 0
1 0 0 1 1
然后
pd.concat([df[['empNo']],s],axis=1)
数据输入
df.to_dict()
{'empNo': {0: 1234, 1: 5678}, 'name': {0: ['AB', 'DE'], 1: ['FG', 'IJ']}}
推荐阅读
- netezza - 是否有任何与 Mac 兼容的 nzjdbc.jar
- node.js - 使用 Node 和 graphql 将文件流式上传到 Azure Blob 存储
- linux - 吉布里 | 我已经更改了 sip-communicator.properties 中的条目,但 jibri 没有反映它
- php - 未知属性上的未定义属性
- sql - 如何在 Postgresql 中执行过滤表移动?
- java - 当序列号存储在 Java 变量中时,Oracle 序列生成器返回负值
- html - 如果某些列被 3 除以某些列被 2 除,如何对齐我的列?
- npm - 我最近无法在 cypress 中获取 id 或 data-test
- javascript - 如何使用jspdf在html中呈现img
- javascript - Javascript 线程安全