为什么不能使用`replace`方法用列表替换整数-Pandas

时间:2018-11-21 10:34:07

标签: python pandas dataframe replace types

因此,假设我的熊猫数据框架如下:

df=pd.DataFrame({'a':[1,2,3,0]})

所以我的目标是在此数据框中将0的值替换为[](空列表),但是我这样做了:

print(df.replace(0,[]))

但这给我一个错误:

TypeError: Invalid "to_replace" type: 'int'

我尝试了所有可能的方法,即:

df[df==0]=[]

等...

但没有任何效果。

所需的输出(以防万一):

   a
0  1
1  2
2  3
3 []

2 个答案:

答案 0 :(得分:4)

可以通过列表理解来实现,但由于不建议将内容与列表混合使用-

df['a'] = [[] if x == 0 else x for x in df.a]

print (df)

    a
0   1
1   2
2   3
3  []

并替换所有列中的所有值:

df = df.applymap(lambda x: [] if x == 0 else x)
print (df)
    a
0   1
1   2
2   3
3  []

答案 1 :(得分:1)

这里有两个问题。首先是熊猫在处理列表时的古怪之处。要将DataFrame中的值替换为列表,您需要执行以下操作;

df.loc[df.a == 0, "a"] = [[] for _ in df[df.a == 0]]

这会根据符合条件(n)的项目数创建df == 0空列表

第二个问题是您的列是整数类型,并且您不能在整数列中存储列表。因此,在分配列表之前,首先需要先将列类型转换为对象。

df = df.astype(object)
df.loc[df.a == 0, "a"] = [[] for _ in df[df.a == 0]]