因此,假设我的熊猫数据框架如下:
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 []
答案 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]]