pandas - 如何通过不同的 id 迭代 pandas 列并连接输出?
问题描述
我正在处理一些 OBD2 远程信息处理数据,我设法将 JSON 类型的数据转换为 pandas 数据框,但是,我还需要处理包含多个键的嵌套字典。下面是示例数据
d = [{'id':'001','0':{'speed':10 , 'voltage':12.3 ,'overspeedCount':2},'1':{'speed':50 , 'voltage':12.2 ,'overspeedCount' :1},'2':{'speed':50 , 'voltage':12.2 ,'overspeedCount' :1}}, {'id':'002','0':{'speed':13 , 'voltage':12.1 ,'overspeedCount' :1},'1':{'speed':40 ,'voltage':12.1 ,'overspeedCount' :0}, '2':{'speed':25 , 'voltage':12.2 ,'overspeedCount' :3}}]
我需要将以上内容转换为不包含 dict 的 pandas 数据框
我设法使用以下代码将 d 转换为 pandas 数据框;
pd.DataFrame(d)
并通过使用以下方法维护 id 来连接前两列数据;
pd.concat([pd.merge(test[['id']],test['0'].apply(pd.Series),how='outer',left_index=True,right_index=True),
pd.merge(test[['id']],test['1'].apply(pd.Series),how='outer',left_index=True,right_index=True)]).reset_index()
但是在实际数据中,我有超过 2 列.. 了解我们需要使用“for”循环,我被困在这里
d = [{'id':'001','0':{'speed':10 , 'voltage':12.3 ,'overspeedCount':2},'1':{'speed':50 , 'voltage':12.2 ,'overspeedCount' :1},'2':{'speed':50 , 'voltage':12.2 ,'overspeedCount' :1}}, {'id':'002','0':{'speed':13 , 'voltage':12.1 ,'overspeedCount' :1},'1':{'speed':40 ,'voltage':12.1 ,'overspeedCount' :0}, '2':{'speed':25 , 'voltage':12.2 ,'overspeedCount' :3}}]
pd.DataFrame(d)
pd.concat([pd.merge(test[['id']],test['0'].apply(pd.Series),how='outer',left_index=True,right_index=True),
pd.merge(test[['id']],test['1'].apply(pd.Series),how='outer',left_index=True,right_index=True)]).reset_index()
还尝试了以下操作(通过考虑将列 str 转换为 int)但最终出现错误消息
n=0
for col in test.columns[n]:
pd.concat([pd.merge(test[['id']],test[n].apply(pd.Series),how='outer',left_index=True,right_index=True),
pd.merge(test[['id']],test[n+1].apply(pd.Series),how='outer',left_index=True,right_index=True)]).reset_index()
n+1
解决方案
df = pd.DataFrame(d)
df = df.set_index('id')
res = df.stack()
res.index = res.index.droplevel(1)
res = res.apply(lambda x: list(x.values()))
pd.DataFrame(res.values.tolist(), index=res.index, columns=['speed','voltage','overspeedCount'])
输出
speed voltage overspeedCount
id
001 10 12.3 2
001 50 12.2 1
001 50 12.2 1
002 13 12.1 1
002 40 12.1 0
002 25 12.2 3
推荐阅读
- java - 如何使用 JCIF 库通过 Kerberos 进行 SAMBA 授权?
- javascript - 如何在浏览器中使用 Vuelidate 2
- sql - SQL REGEXP_SUBSTR
- flutter - 带列的 Flutter 卡片布局
- javascript - 我无法单击未定义 ID 的属性
- string - Scala List take() 方法如何更改 val 类型?
- multithreading - 为什么自旋解锁不需要刷新 x86/amd64 上的存储缓冲区
- python - 从 ray 获取结果时出现 PicklingError
- node.js - Mongoose $lookup 中嵌套对象数组的问题
- javascript - 将鼠标位置转换为画布坐标并返回