如何替换pandas行内的列表中的值

时间:2017-10-22 02:17:29

标签: python pandas numpy dataframe

我有一个看起来像这样的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)

但是他们没有给我预期的结果 我该怎么做?

提前致谢

1 个答案:

答案 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]