gpt4 book ai didi

python - 如何在 Python 中展平其中一列包含 json 对象的数据框?

转载 作者:行者123 更新时间:2023-12-05 01:23:14 25 4
gpt4 key购买 nike

我有一个数据框,其中一列是一个 json 对象,如下所示

customer_id |    date    |             json_object
--------------------------------------------------------------------------
A101 | 2022-06-21 | {'name':['james'],'age':[55], 'hobby':['pubg']}
A102 | 2022-06-22 | {'name':['tarzan'],'status':[]}

jason对象内容不统一。在上面的示例中,第一行中的 json 对象为“爱好”,第二行的 json 对象中不存在。与第二行类似,属性状态为空,即 []

问题:如何在 Python 中展平这个数据框以创建一个新的数据框,其中每一行仅对应一个 json 对象,如下所示

customer_id |    date    | attribute
---------------------------------------------
A101 | 2022-06-21 | 'name': 'james'
A101 | 2022-06-21 | 'age': 55
A101 | 2022-06-21 | 'hobby': 'pubg'
A102 | 2022-06-22 | 'name': 'tarzan'
A102 | 2022-06-22 | 'status':

最佳答案

假设 json_object 的每个值都是一个 dict,您还可以使用以下方法:

df = pd.DataFrame(
data = {
"customer_id": ["A101", "A102"],
"date": ["2022-06-21", "2022-06-22"],
"json_object": [{'name': 'james','age':55, 'hobby':'pubg'}, {'name': 'tarzan','status':'single'}]
}
)
df["json_object"] = df["json_object"].map(lambda x: [[i, x[i]] for i in x])
df = df.explode(column="json_object")
df.json_object = df.json_object.str[0].astype(str) + ": " + df.json_object.str[1].astype(str)
df

------------------------------------------
customer_id date json_object
0 A101 2022-06-21 name: james
0 A101 2022-06-21 age: 55
0 A101 2022-06-21 hobby: pubg
1 A102 2022-06-22 name: tarzan
1 A102 2022-06-22 status: single
------------------------------------------

编辑

自从您将数据框更改为

df = pd.DataFrame(
data = {
"customer_id": ["A101", "A102"],
"date": ["2022-06-21", "2022-06-22"],
"json_object": [{'name': ['james'],'age':[55], 'hobby':['pubg']}, {'name': ['tarzan'],'status':['single']}]
}
)

我的代码必须作如下调整:

df = pd.DataFrame(
data = {
"customer_id": ["A101", "A102"],
"date": ["2022-06-21", "2022-06-22"],
"json_object": [{'name': ['james'],'age':[55], 'hobby':['pubg']}, {'name': ['tarzan'],'status':['single']}]
}
)
df["json_object"] = df["json_object"].map(lambda x: [[i, x[i][0]] for i in x])
df = df.explode(column="json_object")
df.json_object = df.json_object.str[0].astype(str) + ": " + df.json_object.str[1].astype(str)
df

如果包含空列表,则只需在 lambda 函数中添加一个 if-else 条件。请注意,我还重命名了下一个代码提取中的列。

df = pd.DataFrame(
data = {
"customer_id": ["A101", "A102"],
"date": ["2022-06-21", "2022-06-22"],
"json_object": [{'name': ['james'],'age':[55], 'hobby':['pubg']}, {'name': ['tarzan'],'status':[]}]
}
)
df["json_object"] = df["json_object"].map(lambda x: [[i, x[i][0]] if x[i] else [i, ""] for i in x])
df = df.rename(columns={"json_object": "attribute"}).explode(column="attribute")
df.attribute = df.attribute.str[0].astype(str) + ": " + df.attribute.str[1].astype(str)

关于python - 如何在 Python 中展平其中一列包含 json 对象的数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72713108/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com