我有一个看起来像这样的pandas数据框
2 zero zero zero zero zero zero zero 2 zero zero ... 6 6 zero [2, 4] zero 2 zero zero zero zero
3 1 zero 6 1 zero zero zero zero zero zero ... zero zero zero zero 4 zero zero 5 zero zero
4 zero zero zero zero 6 zero zero [2, 0] zero zero ... zero zero zero zero zero zero zero zero zero zero
每行包含一些整数,列表和零字符串
我正在尝试将列表中的0替换为另一个像这样的值 [2,0]。我想将其转换为[2,7]。
我尝试了train['finally'] = train['finally'].map({0:7})
这就是train['finally']
的样子
0 [zero, zero, zero, zero, 2, zero, zero, zero, ...
1 [zero, zero, zero, 3, zero, zero, zero, 4, zer...
2 [zero, zero, zero, zero, zero, zero, zero, 2, ...
3 [1, zero, 6, 1, zero, zero, zero, zero, zero, ...
4 [zero, zero, zero, zero, 6, zero, zero, [2, 0]...
5 [zero, zero, 3, zero, zero, 4, zero, zero, zer...
6 [zero, zero, zero, zero, zero, zero, zero, zer...
7 [zero, zero, zero, zero, [3, 6], zero, zero, z...
8 [zero, [1, 3], zero, zero, zero, zero, zero, z...
9 [zero, zero, 5, zero, zero, 3, zero, 1, 2, [1,...
Name: finally, dtype: object
我也试过visits_df.replace(0,7)
但是他们没有给我预期的结果 我该怎么做?
提前致谢
答案 0 :(得分:1)
df.replace
将查找包含该值的单元格,并将其替换为目标。
在你的情况下,你正在处理一列列表,所以需要一些更积极的东西。我们试试astype(str)
+ str.replace
+ ast.literal_eval
。
import ast
df['finally'] = df['finally'].astype(str)\
.str.replace('0', '7').apply(ast.literal_eval)
根据需要转换为字符串,转换并转换回来。
带有python列表的微型演示。当翻译成大熊猫时,原则保持不变。
In [52]: data = ['zero', [0, 1, 0, 2], 'zero', 'zero', 1, 0]
In [53]: str(data).replace('0', '7')
Out[53]: "['zero', [7, 1, 7, 2], 'zero', 'zero', 1, 7]"
In [54]: ast.literal_eval(_)
Out[54]: ['zero', [7, 1, 7, 2], 'zero', 'zero', 1, 7]