python - 清理 pandas 数据框中的多个 JSON
问题描述
我创建了一个如下所示的数据框,国家/地区采用 JSON 格式:
df = pd.DataFrame([['matt', '''[{"c_id": "cn", "c_name": "China"}, {"c_id": "au", "c_name": "Australia"}]'''],
['david', '''[{"c_id": "jp", "c_name": "Japan"}, {"c_id": "cn", "c_name": "China"},{"c_id": "au", "c_name": "Australia"}]'''],
['john', '''[{"c_id": "br", "c_name": "Brazil"}, {"c_id": "ag", "c_name": "Argentina"}]''']],
columns =['person','countries'])
我想得到如下输出,只有国家名称,用逗号分隔并按字母顺序排序:
result = pd.DataFrame([['matt', 'Australia, China'],
['david', 'Australia, China, Japan'],
['john', 'Argentina, Brazil']],
columns =['person','countries'])
我尝试使用几种方法来做到这一点,但没有一个成功。我希望下面的内容能够适当地拆分 JSON 格式,但它没有成功 - 可能是因为 JSON 在数据帧中是字符串格式?
result = pd.io.json.json_normalize(df, 'c_name')
解决方案
一种解决方案是将ast.literal_eval
字符串视为字典列表:
import ast
df["countries"] = df["countries"].map(lambda x: ast.literal_eval(x))
df["countries"] = df["countries"].map(lambda x: sorted([c["c_name"] for c in x]))
推荐阅读
- python - 如何解决“NotImplementedError”
- javascript - Vue ReferenceError:未定义 slugify
- scala - 有没有办法让外部模块添加可在内部模块中使用的隐式?
- html - 当屏幕宽度变得太小时如何使两个div堆叠在一起
- python - 如何在控制台中打印文本框中的文本?
- laravel - 404 | 如果我创建任何路线而不是默认路线,则未找到错误
- react-native - 可能的未处理承诺拒绝(id:0)错误:超过 0 毫秒的超时
- c++ - 如何输入特定长度的字符串?
- java - 如何更改任何否的符号。通过点击按钮?
- java - java.util.NoSuchElementException(带有 gradle 的 java)