如何从大熊猫字典列中提取值?

时间:2019-08-23 15:43:51

标签: python pandas

我有一个数据框,每列{'value':2343}中都包含字典。我正在尝试摆脱字典,并将单元格设置为等于数据框中所有字典的值。

import pandas as pd
df = pd.DataFrame([
    {'node': 'A', 'read': {'value': 2343}, 'write': {'value': 23}},
    {'node': 'B', 'read': {'value': 334}, 'write': {'value': 233444}},
])

我可以将单元格的值设置为一列:

df['read'] = df['read'].apply(lambda x: x['value'])

是否有办法在数据框中的所有列上执行此操作?我应该遍历所有列吗?

预期输出应为数据框:

df = pd.DataFrame([
    {'node': 'A', 'read': 2343, 'write': 23},
    {'node': 'B', 'read': 334, 'write': 233444},
])

3 个答案:

答案 0 :(得分:1)

您可以使用applymap

import pandas as pd
df = pd.DataFrame([
    {'node': 'A', 'read': {'value': 2343}, 'write': {'value': 23}},
    {'node': 'B', 'read': {'value': 334}, 'write': {'value': 233444}},
])

cols = ['read', 'write']
df[cols] = df[cols].applymap(lambda x: x['value'])

print(df)

[Out]:

  node  read   write
0    A  2343      23
1    B   334  233444

答案 1 :(得分:0)

这如何:

df.apply(lambda x: x.apply(lambda y: y['value'] if isinstance(y, dict) else y))

使用此方法,您不必担心选择哪些列是字典。

答案 2 :(得分:0)

如果它们是字典,则可以使用.str访问器,如下所示

df['read'] = df['read'].str['value']
df['write'] = df['write'].str['value']