将多嵌套字典值读入Pandas中的列

2024-09-30 16:31:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些硬件以嵌套字典的形式输出数据

data_out = {'unimportant_dict': [{'dateTime': '2019-12-01', 'value': '183'}], 'secondary_dict': {'sub_dict': [{'time': '00:00:00', 'value': 0}, {'time': '00:01:00', 'value': 0}, {'time': '00:02:00', 'value': 0}], 'datasetInterval': 1}}

我对“sub_dict”中的“value”数据感兴趣,我想将其读入一个数据帧,但我有多个文件要整理成一个数据帧

我可以读一个文件,其中的工作很好

tempdict = data_out['secondary_dict']
testdf = pd.DataFrame(tempdict['sub_dict'])

       time        value
     0  00:00:00      0
     1  00:01:00      0
     2  00:02:00      0
     3  00:03:00      0
     4  00:04:00      0

现在我想添加第二个文件,但只添加值数据(因为时间戳总是相同的)。假设第二个文件的结构与上面相同,我的方法是错误的

tempdict2 = data_out2['secondary_dict']['value']   
testdf['new data'] = tempdict2
TypeError: list indices must be integers or slices, not str

我认为这是因为它是一个很长的目录列表(我假设它是一个保存时间顺序的列表)。我想我可以添加它,然后删除额外的时间列,但它将整个dict添加为一个列

          time  value                              fle2
   0  00:00:00      0  {'time': '00:00:00', 'value': 0}
   1  00:01:00      0  {'time': '00:01:00', 'value': 0}
   2  00:02:00      0  {'time': '00:02:00', 'value': 0}
   3  00:03:00      0  {'time': '00:03:00', 'value': 0}
   4  00:04:00      0  {'time': '00:04:00', 'value': 0}

在我写这篇文章的时候,我想知道将“value”值提取到列表中,然后将其添加到df中是否更容易

我不认为这是一个复制品 Capture python value from multi-nested dictionary 因为这仍然是一个列表中的一个单独的dict,而这个列表中有很多dict

谢谢你的帮助


Tags: 文件数据列表data字典硬件timevalue
1条回答
网友
1楼 · 发布于 2024-09-30 16:31:05

首先,将所有数据读入名为all_nested_dicts的列表。我假设所有文件中的记录数相同,并且所有文件的time值都相同。如果没有这两个假设,下面的解决方案将无法工作,因为我只是通过连接数据帧来合并数据帧

dfs = []
for i, nested_dict in enumerate(all_nested_dicts):
    df = pd.DataFrame(nested_dict['secondary_dict']['sub_dict']).rename(columns = {'value': f'value_{i}'})
    df.sort_values("time", inplace = True)
    # drop the `time` column from all subsequent files after sorting
    if i >= 1:
        df.drop("time", axis = 1, inplace = True)
    dfs.append(df)

final_df = pd.concat(dfs, axis = 1)

相关问题 更多 >