如何用熊猫中的值替换空字典

时间:2020-08-10 14:18:04

标签: python pandas data-manipulation data-cleaning

我有以下内容:

pd.DataFrame({
    'a' : { 1 : {}},
    'b' : {1 : 3}
})

哪个看起来像:

    a  b
1  {}  3

并且希望能够将{}替换为0或NaN,但是我不确定该怎么做。我似乎无法使用.replace

pd.DataFrame({
    'a' : { 1 : {}},
    'b' : {1 : 3}
}).replace({ {} : 0})

给出错误

4 个答案:

答案 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}将导致爆炸失败,原因是到所有三个键)