Python Pandas:如何在数据框的一列中对字典的所有值求和?
Python Pandas: How can I sum all of the values of a dictionary in a column of my dataframe?
这是我的数据框:
name count_dic
0 name1 {'x2,bv.': 435, 'x3': 4, 'x1': 123}
1 name2 {'x5': 98, 'x2,bv.': 435}
我想总结 'count_dic' 列中 dic 的所有值,得到如下内容:
name count_dic sum_vals
0 name1 {'x2,bv.': 435, 'x3': 4, 'x1': 123} 562
1 name2 {'x5': 98, 'x2,bv.': 435} 533
这是我尝试过的:
df_map.count_dic.apply(lambda L: sum(L.values())).sum()
但我收到以下错误:
TypeError: unsupported operand type(s) for +: 'dict_values' and 'dict_values'
有人可以帮忙吗?
注意:我觉得你的数据帧结构有点奇怪,如果数据集变大,可能会表现得不太理想。
在任何情况下,您的代码看起来都是格式正确的[已在 python 2.7.8 和 3.4.1 上测试]
df = pd.DataFrame(columns = ['name','count_dic'])
df.loc[0] = ['name0',{'x2,bv.': 435, 'x3': 4, 'x1': 123}]
df.loc[1] = ['name1',{'x5': 98, 'x2,bv.': 435}]
df.count_dic.apply(lambda x : sum(x.values())).sum()
1095
如果您想要按行显示值
df.count_dic.apply(lambda x : sum(x.values()))
0 562
1 533
Name: count_dic, dtype: int64
使用有一个更具体的问题,涉及到的变量类型不是 int,需要显式转换。
df.count_dic.apply(lambda x : sum([int(y) for y in x.values())])
第 1 步: 确保在读取数据时列具有正确的数据类型,即 。如果已经读成string先转成dict格式
import ast
dict_col_data=[]
for row in df["test_col"]:
dict_col_data.append(ast.literal_eval(row))
df["test_col_dict"]=dict_col_data
第 2 步:现在通过显式声明数据类型来计算每一行的总和,以避免在读取时出现任何不匹配。
df.test_col_dict.apply(lambda x :sum([int(y) for y in x.values()]) )
这是我的数据框:
name count_dic
0 name1 {'x2,bv.': 435, 'x3': 4, 'x1': 123}
1 name2 {'x5': 98, 'x2,bv.': 435}
我想总结 'count_dic' 列中 dic 的所有值,得到如下内容:
name count_dic sum_vals
0 name1 {'x2,bv.': 435, 'x3': 4, 'x1': 123} 562
1 name2 {'x5': 98, 'x2,bv.': 435} 533
这是我尝试过的:
df_map.count_dic.apply(lambda L: sum(L.values())).sum()
但我收到以下错误:
TypeError: unsupported operand type(s) for +: 'dict_values' and 'dict_values'
有人可以帮忙吗?
注意:我觉得你的数据帧结构有点奇怪,如果数据集变大,可能会表现得不太理想。
在任何情况下,您的代码看起来都是格式正确的[已在 python 2.7.8 和 3.4.1 上测试]
df = pd.DataFrame(columns = ['name','count_dic'])
df.loc[0] = ['name0',{'x2,bv.': 435, 'x3': 4, 'x1': 123}]
df.loc[1] = ['name1',{'x5': 98, 'x2,bv.': 435}]
df.count_dic.apply(lambda x : sum(x.values())).sum()
1095
如果您想要按行显示值
df.count_dic.apply(lambda x : sum(x.values()))
0 562
1 533
Name: count_dic, dtype: int64
使用有一个更具体的问题,涉及到的变量类型不是 int,需要显式转换。
df.count_dic.apply(lambda x : sum([int(y) for y in x.values())])
第 1 步: 确保在读取数据时列具有正确的数据类型,即
import ast
dict_col_data=[]
for row in df["test_col"]:
dict_col_data.append(ast.literal_eval(row))
df["test_col_dict"]=dict_col_data
第 2 步:现在通过显式声明数据类型来计算每一行的总和,以避免在读取时出现任何不匹配。
df.test_col_dict.apply(lambda x :sum([int(y) for y in x.values()]) )