为什么你不能使用"替换"方法用列表替换整数 - 熊猫



假设我有一个熊猫数据帧,如下所示:

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 []

通过列表理解是可能的,但由于混合内容-数字与列表,因此不建议使用:

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  []

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

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

这将根据与标准(df == 0(匹配的项目数创建n空列表

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

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

最新更新