我有一个如下创建的数据框,其中的国家/地区采用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')
答案 0 :(得分:1)
一种解决方案是使用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]))