使用 Python/Pandas
我有一个非常简单的 csv 文件,除了一列:源是一个数组。
我的表格示例:
Column A |Column B |Column C |Column D |
__________________________|__________|__________|__________|
[Water, Food, Groceries] | 0 |true |9 |
[Water, Desert, Sand] | 1 |false |1 |
[Earth, Groceries] | 2 |null |12 |
[Air, Food, Car] | 3 |true |8 |
[Cristal, Love, Groceries]| 4 |false |0 |
我想要实现的目标:
Column B |Column C |Column D |column_a_water |column_a_food | column_a_groceries |
__________|__________|__________|_______________|_______________|____________________|
0 |true |9 | 1 | 1 | 1 |
1 |false |1 | 1 | 0 | 0 |
2 |null |12 | 0 | 0 | 1 |
3 |true |8 | 0 | 1 | 0 |
4 |false |0 | 0 | 0 | 1 |
使用 pandas get_dummies,我可以使其与 C 列一起工作,但不能与 A 列一起工作。使用相同的技术,它不起作用。
遇到这种情况我该怎么办?
最佳答案
使用,Series.explode
在A 列
上,然后使用 Series.str.get_dummies
在此分解列上,然后使用 DataFrame.sum
在 level=0
上,然后使用 DataFrame.add_prefix
将前缀 Column A
添加到每个虚拟列,最后使用 DataFrame.join
将原始数据帧与包含虚拟列的数据帧连接起来:
# Use this line IF the values in Column A are type of `string` instead of lists.
df['Column A'] = df['Column A'].str.strip('[]').str.split('\s*,\s*')
df1 = (
df['Column A'].explode()
.str.get_dummies().sum(level=0).add_prefix('Column A_')
)
df1 = df.drop('Column A', 1).join(df1)
结果:
# print(df1)
Column B Column C Column D Column A_Air ... Column A_Groceries Column A_Love Column A_Sand Column A_Water
0 0 True 9 0 ... 1 0 0 1
1 1 False 1 0 ... 0 0 1 1
2 2 NaN 12 0 ... 1 0 0 0
3 3 True 8 1 ... 0 0 0 0
4 4 False 0 0 ... 1 1 0 0
关于python - 数据框:coll 中数组的 get_dummies,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62600525/