数据帧中字典的求和值

时间:2019-04-26 09:19:44

标签: python pandas dictionary

我有一个在其单元格中包含字典的数据框。 首先,我对没有值的列进行过滤,以便使用字典进行迭代和探索。 用字典对列进行迭代,我的目标是求和这些字典的值,并将它们添加到探索的新列中。

我不断收到错误消息:

  

TypeError:“ NoneType”对象不可迭代

数据框列如下所示:

[In] `df['column_A'].iloc[1]`
[Out] 
{'16875259': 0.0,
 '16909775': 9.0,
 '16909808': 214.0,
 '16909816': 3696.0,
 '16910032': 725.0,
 '16910067': 27.0,
 '16910182': 11.0,
 '16910237': 4.0,
 '16910262': 3191.0,
 '16910358': 52.0,
 '16910411': 73.0,
 '16910416': 111.0,
 '16910477': 1869.0,
 '16910598': 2425

我设法构建的代码如下:

for column in my_df:
    if(my_df[column].values[1]!='None' or my_dfdf1[column].values[1] !=None):
        for column in df1:
            for item in df1[column].values:
                for i in item:
                    #print(i)
                    # Here I need to sum the values

我期望值​​的总和,但我不断收到错误消息:

  

TypeError:“ NoneType”对象不可迭代

2 个答案:

答案 0 :(得分:3)

如果值是字典,请使用if-else语句求和,而按元素进行处理时请使用DataFrame.applymap

df = pd.DataFrame({'a':[{'16875259': 0.0, '16909775': 9.0, '16909808': 214.0},
                        {'16875259': 0.0, '16909775': 10.0}, 
                        np.nan],
                    'b':[{'16875259': 3.0, '16909775': 9.0, '16909808': 214.0},
                         np.nan,
                        {'16875259': 4.0, '16909775': 10.0}, 
                        ]})
print (df)
0  {'16875259': 0.0, '16909775': 9.0, '16909808':...   
1                {'16875259': 0.0, '16909775': 10.0}   
2                                                NaN   

                                                   b  
0  {'16875259': 3.0, '16909775': 9.0, '16909808':...  
1                                                NaN  
2                {'16875259': 4.0, '16909775': 10.0}  

df = df.applymap(lambda x: sum(x.values()) if isinstance(x, dict) else np.nan)
print (df)
       a      b
0  223.0  226.0
1   10.0    NaN
2    NaN   14.0

答案 1 :(得分:1)

您可以尝试以下方法吗?

df['column_A'].apply(lambda x: sum(x.values()))