如何解压缩数据框列中存在的 json 的键,值将转换为键作为列,而使用 python 将其值转换为列?

Posted

技术标签:

【中文标题】如何解压缩数据框列中存在的 json 的键,值将转换为键作为列,而使用 python 将其值转换为列?【英文标题】:How to unpack the key, value of json present in a column of a dataframe is converted into key as columns while value at its values using python? 【发布时间】:2020-06-15 14:03:19 【问题描述】:

我有一个数据框:

我想将出现在强制转换列中的每行 json 格式的键、值分别解压缩到单独的列和它们的值中。所以基本上,cast_id、character 应该在数据框中用它们各自的值分隔成列。

我试过了:

from pandas.io.json import json_normalize
data_1 = json_normalize(data = casts['cast'], 
                            meta =['cast_id', 'character', 'credit_id', 'gender', 'id','name','order', 'profile_path'])

代码抛出错误:AttributeError: 'str' object has no attribute 'values'

【问题讨论】:

你能发布一些示例数据吗? 【参考方案1】:

我查看了您正在使用的数据集,这将起作用:

from ast import literal_evalcasts['cast'] = casts['cast'].apply(literal_eval)

您现在可以通过json_normalize(data=casts['cast'][0])

找到每部电影(例如第一部电影)的演员表

如果你想要一个包含所有电影的所有演员的数据框,你可以这样做:total_cast = pd.DataFrame()

for i in range(len(casts)): total_cast = total_cast.append(json_normalize(data=casts['cast'][i]))

【讨论】:

我试过你建议的代码。但是,当我尝试从列表中提取字典时,它会抛出 JSONDecodeError 错误:期望用双引号括起来的属性名称:第 1 行第 3 列(字符 2)。 您是否将新创建的带有替换单引号的数据框分配给了新的数据框? pandas 的“分配”功能不会更新数据框。所以你必须做 casts = casts.assign(cast=lambda x:x['cast'].str.replace("\'", "\""))。然后执行另一个函数。希望这有效! 是的,我试过了,但是现在 JSONDecodeError: Expecting value: line 1 column 2416 (char 2415) 的错误来了。 我查找了您正在使用的数据集。我将原始答案更改为应该可以清楚地工作的解决方案。

以上是关于如何解压缩数据框列中存在的 json 的键,值将转换为键作为列,而使用 python 将其值转换为列?的主要内容,如果未能解决你的问题,请参考以下文章

Pyspark 删除数据框列中的多个字符

如何迭代熊猫数据框列中的元素?

如何迭代数据框列中的列表项

以字符串形式存储在 Pandas 数据框列中的解析列表

如何从连接的数据框列中替换 NaN?

如何比较熊猫数据框列中可用的十进制数?