如何将字符串字典转换为字典并拆分为单独的列

Posted

技术标签:

【中文标题】如何将字符串字典转换为字典并拆分为单独的列【英文标题】:How to Convert String Dictionary to Dictionary and the split into separate columns 【发布时间】:2021-05-14 06:55:38 【问题描述】:

我有一个单列 pandas 数据框,看起来每个字典当前都是一个字符串。我想将 pandas 中的每个项目转换为字典,然后将其拆分为单独的列。

当前外观

0         'Owl': '8109284', 'county': '27'
1         'Kid': '298049', 'county': '28'
2         'Tree': '190849', 'county': '29'
3         'Garden': '9801294', 'county': '30'
4         'House': '108094', 'county': '31'

End Look

           Item     Count      County   County Number
0         'Owl'    '8109284' 'county'     '27'
1         'Kid'    '298049'  'county'     '28'
2         'Tree'   '190849'  'county'     '29'
3         'Garden' '9801294  'county'     '30'
4         'House'  '108094'  'county'     '31'


Can anyone help resolve this. I've tried a bunch of different things.

【问题讨论】:

相关Convert a String representation of a Dictionary to a dictionary? 【参考方案1】:

您可以使用literal_eval()string 中获取dict 对象。之后使用dictionary 上的items() 方法获取项目。最后,构建数据框。

import ast
import pandas as pd

d = [[0,         "'Owl': '8109284', 'county': '27'"],
[1,         "'Kid': '298049', 'county': '28'"],
[2,         "'Tree': '190849', 'county': '29'"],
[3,         "'Garden': '9801294', 'county': '30'"],
[4,         "'House': '108094', 'county': '31'"]]

df = pd.DataFrame(d, columns=['a', 'b'])


pd.DataFrame(df['b'].apply(lambda x: [j for i in ast.literal_eval(x).items() for j in i]).to_list(), 
             columns=['Item', 'Count', 'County', 'County Number'])
        Item    Count   County  County Number
0       Owl     8109284 county  27
1       Kid     298049  county  28
2       Tree    190849  county  29
3       Garden  9801294 county  30
4       House   108094  county  31

【讨论】:

【参考方案2】:

如果您的 dicts 格式相同(2 个键,2 个值),您可以使用 apply 功能。 'data' 是您的 dict 列:

df['Item']=df.data.apply(lambda x: list(eval(x).keys())[0])
df['Count']=df.data.apply(lambda x: list(eval(x).values())[0])
df['County']=df.data.apply(lambda x: list(eval(x).keys())[1])
df['County Number']=df.data.apply(lambda x: list(eval(x).values())[0])

del df['data']

输出

    Item    Count  County County Number
0  Owl     8109284  county  8109284
1  Kid     298049   county  298049
2  Tree    190849   county  190849
3  Garden  9801294  county  9801294
4  House   108094   county  108094

【讨论】:

以上是关于如何将字符串字典转换为字典并拆分为单独的列的主要内容,如果未能解决你的问题,请参考以下文章

将元素为字典的列拆分为多列[重复]

如何将json字符串转换为字典并在键中保存顺序? [复制]

如何将带有字典列表的熊猫列拆分为每个键的单独列

在pyspark中将带有字符串json字符串的列转换为带有字典的列

在R中,如何将字符(等级)转换为数字并放在单独的列中

如何使用列表和字典将字符串转换为二进制代码