python - Python:将列中的JSON结构扩展到同一数据框中的列
问题描述
我有一列由 JSON 结构化数据组成。我的df
样子是这样的:
ClientToken Data
7a9ee887-8a09-ff9592e08245 [{"summaryId":"4814223456","duration":952,"startTime":1587442919}]
bac49563-2cf0-cb08e69daa48 [{"summaryId":"4814239586","duration":132,"startTime":1587443876}]
我想将其扩展为:
ClientToken summaryId duration startTime
7a9ee887-8a09-ff9592e08245 4814223456 952 1587442919
bac49563-2cf0-cb08e69daa48 4814239586 132 1587443876`
有任何想法吗?
解决方案
你可以试试:
df[["ClientToken"]].join(df.Data.apply(lambda x: pd.Series(json.loads(x[1:-1]))))
说明:
- 选择
Data
列并应用以下步骤:- 因为 "
Data
" 内容被包装在一个列表中并且这是一个字符串,我们可以[]
使用手动x[1:-1]
删除(删除第一个和最后一个字符)。 - 由于
"Data"
列是 astring
并且我们实际上想要 aJSON
,因此我们需要对其进行转换。一种解决方案是使用模块中的json.loads()
功能json
。代码变成json.loads(x[1:-1])
- 然后,将 转换
dict
为pd.Series
usingpd.Series(json.loads(x[1:-1]))
- 因为 "
- 使用 将这些新列添加到现有数据框中
join
。此外,您会注意到我使用 double[]
来选择"ClientToken"
列作为数据框。
代码+插图:
import pandas as pd
import json
# step 1.1
print(df.Data.apply(lambda x: x[1:-1]))
# 0 {"summaryId":"4814223456","duration":952,"star...
# 1 {"summaryId":"4814239586","duration":132,"star...
# Name: Data, dtype: object
# step 1.2
print(df.Data.apply(lambda x: json.loads(x[1:-1])))
# 0 {'summaryId': '4814223456', 'duration': 952, '...
# 1 {'summaryId': '4814239586', 'duration': 132, '...
# Name: Data, dtype: object
# step 1.3
print(df.Data.apply(lambda x: pd.Series(json.loads(x[1:-1]))))
# summaryId duration startTime
# 0 4814223456 952 1587442919
# 1 4814239586 132 1587443876
# step 2
print(df[["ClientToken"]].join(df.Data.apply(lambda x: pd.Series(json.loads(x[1:-1])))))
# ClientToken summaryId duration startTime
# 0 7a9ee887-8a09-ff9592e08245 4814223456 952 1587442919
# 1 bac49563-2cf0-cb08e69daa48 4814239586 132 1587443876
编辑1:
似乎有些行list
inData
有多个dicts
,您可以尝试:
df[["ClientToken"]].join(df.Data.apply(lambda x: [pd.Series(y)
for y in json.loads(x)]) \
.explode() \
.apply(pd.Series))
推荐阅读
- java - JFreeChart - RangeAxis 自动量程并且不从 0 开始
- r - for循环中的变量没有在R中分配
- java - 如果我加入终止(死)线程怎么办
- reactjs - 我想将 IronSource 广告网络与我的 react native 项目集成
- node.js - 如何在 node.js 中使用 fs.unlink() 之前检查文件的删除权限?
- sql - sql db2 数据库
- python - How to calculate the total of each list, in a list of lists Python
- javascript - 使用 json_encode 从 php 到 javascript 的数据传输
- javascript - 根容器上的 setState() 不保留 react-navigation (V3) 的路线
- linux - 如何在本地主机上将 studio3t 连接到 pymongo