【发布时间】:2021-04-23 19:32:27
【问题描述】:
我想解析一列,并将键值对作为列
输入:
我有一个具有以下结构的数据框(称为 df):
ID data
A1 {"userMatch": "{"match":{"phone":{"name":{"score":1}},"name":{"score":1}}}"}
A2 {"userMatch": "{"match":{"phone":{"name":{"score":0.934}},"name":{"score":0.952}}}"}
预期输出:
我想创建一个名为'score'的新列并从键值对中获取值
ID score1 score2
A1 1 1
A2 0.934 0.952
尝试的解决方案:
data_json = df['data'].transform(lambda x: json.loads(x))
df['score1'] = data_json.str.get('userMatch').str.get('match').str.get('phone').str.get('name').str.get('score')
df['score2'] = data_json.str.get('userMatch').str.get('match').str.get('phone').str.get('name').str.get('name').str.get('score')
错误:
TypeError: the JSON object must be str, bytes or bytearray, not Series
注意事项:
我什至不确定如何获得下一个分数2
【问题讨论】:
-
你为什么要做 data_json = df['data'].transform(lambda x: json.loads(x)).您已经阅读为 json。你试过没有它吗?
-
你也可以发布数据类型吗?
-
由于数据列似乎包含一个带有单个键 =“UserMatch”的字典和一个由字符串组成的单个值(即)
"{"match":{"phone":{"name":{"score":1}},"name":{"score":1}}}",因此您可以使用正则表达式来解析得分值。 -
@Dieter yes,ID->字符串和数据->对象
-
@Epsi95 是的,我累了,收到错误消息“只能将 .str 访问器与字符串值一起使用!”
标签: json python-3.x pandas