我有以下内容:
pd.DataFrame({
'a' : { 1 : {}},
'b' : {1 : 3}
})
哪个看起来像:
a b
1 {} 3
并且希望能够将{}
替换为0或NaN,但是我不确定该怎么做。我似乎无法使用.replace
pd.DataFrame({
'a' : { 1 : {}},
'b' : {1 : 3}
}).replace({ {} : 0})
给出错误
答案 0 :(得分:3)
您可以使用bool,当dict
为空时将返回False
df=df.where(df.astype(bool),0)
df
Out[26]:
a b
1 0 3
答案 1 :(得分:0)
您可以这样做:
df = pd.DataFrame({
'a' : { 1 : {}},
'b' : {1 : 3}
})
df.applymap((lambda x: 0 if x == {} else x))
答案 2 :(得分:0)
此:
pd.DataFrame({
'a' : { 1 : {}},
'b' : {1 : 3}
}).replace({ {} : 0})
导致错误,因为dict
的密钥必须是可哈希的-{}
不可。在这种情况下,您可以将pandas.DataFrame.replace
与两个长度相等的list
一起使用,方法如下:
import pandas as pd
df = pd.DataFrame({
'a' : { 1 : {}},
'b' : {1 : 3}
}).replace([{}],[0])
print(df)
输出:
a b
1 0 3
答案 3 :(得分:0)
由于字典不可散列,因此.replace
无法执行,但是熊猫具有处理可迭代项的功能:.explode
print(df.explode('a'))
a b
1 NaN 3
如果字典具有从0开始的连续整数键(0,1,n-1),而不是为空,它将仍然有效:
df = pd.DataFrame({
'a' : {1 : {0: 'row0', 1: 'row1'}},
'b' : {1 : 3}
})
print(df.explode('a'))
a b
1 row0 3
1 row1 3
如果字典不为空或者键不是严格连续且基于0的,则将引发异常(例如{2:val,'string_key':val,-1:val}将导致爆炸失败,原因是到所有三个键)