【问题标题】: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?如何解压缩数据框列中存在的 json 的键,值将转换为键作为列,而使用 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'

【问题讨论】:

  • 你能发布一些示例数据吗?

标签: python json pandas dataframe unpack


【解决方案1】:

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

from ast import literal_eval
casts['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) 的错误来了。
  • 我查找了您正在使用的数据集。我将原始答案更改为应该可以清楚地工作的解决方案。
猜你喜欢
  • 2021-08-24
  • 1970-01-01
  • 2016-03-08
  • 2022-08-17
  • 2019-05-19
  • 2020-01-27
  • 1970-01-01
  • 1970-01-01
  • 2021-06-17
相关资源
最近更新 更多