首页 > 解决方案 > 如何从一个单元格中获取一个或多个值并使用 pandas 转储单元格的其余部分

问题描述

在这个电影数据库中,有一个叫做口语的列。列中的数据如下所示

[{“iso_639_1”: “cn”, “name”: “\u5e7f\u5dde\u8bdd / \u5ee3\u5dde\u8a71”}, 
 {“iso_639_1”: “ja”, “name”: “\u65e5\u672c\u8a9e”}, 
 {“iso_639_1”: “zh”, “name”: “\u666e\u901a\u8bdd”}
]

我需要提取语言代码,因此我正在考虑使用字符串拆分函数来提取此特定行 '“iso_639_1”:' 之后引号之间的代码,并使用它来清理数据。

标签: pythonpandasdataframesplitjupyter-notebook

解决方案


如果字典项是字符串表示,您可以先通过 apply 将它们再次转换为字典,然后您可以通过获取密钥ast.literal_eval来简单地提取语言代码:iso_639_1

import ast
import pandas as pd

d = ['{"iso_639_1": "cn", "name": "\u5e7f\u5dde\u8bdd / \u5ee3\u5dde\u8a71"}', 
 '{"iso_639_1": "ja", "name": "\u65e5\u672c\u8a9e"}', 
 '{"iso_639_1": "zh", "name": "\u666e\u901a\u8bdd"}'
]

df = pd.DataFrame(d, columns=['a'])
df['a'] = df['a'].apply(ast.literal_eval) #not needed if the values already exist as dicts in your df
df['lang'] = df['a'].apply(lambda x:x['iso_639_1'])

输出:

一个
0 {'iso_639_1': 'cn', 'name': '广州话/广州话'} cn
1 {'iso_639_1': 'ja', 'name': '日本语'}
2 {'iso_639_1': 'zh', 'name': '普通话'} zh

推荐阅读