如何解压缩数据框列中存在的 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_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) 的错误来了。 我查找了您正在使用的数据集。我将原始答案更改为应该可以清楚地工作的解决方案。以上是关于如何解压缩数据框列中存在的 json 的键,值将转换为键作为列,而使用 python 将其值转换为列?的主要内容,如果未能解决你的问题,请参考以下文章