合并具有不同时间戳的词典

2024-04-26 18:42:16 发布

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

数据1:

    Time                Header  Header  Header  Header 
    2015-08-01 07:00    14.4    14.4    14.4    68 
    2015-08-01 07:01    14.4    14.4    14.4    68
    2015-08-01 07:01    14.4    14.4    14.4    68   

数据2:

Time        Header  Header  Header  Header  Header
07:00       34      31      37      51      72
07:02       32      31      17      56      12

我想合并这两个文件以便得到输出:

    Time                Header  Header  Header  Header Header  Header  Header   Header  Header
    2015-08-01 07:00    14.4    14.4    14.4    68     34       31      37      51      72

如果没有时间戳的引用文件,我只需要字段中的Data1一行,这样:

           Time                Header  Header  Header  Header Header  Header  Header    Header  Header
    2015-08-01 07:00    14.4    14.4    14.4    68     34       31      37      51      72
    2015-08-01 07:01    14.4    14.4    14.4    68    
    2015-08-01 07:02    14.4    14.4    14.4    68     32       31      17      56      12

Data2文件是一个引用文件,每15分钟有一个条目,而data1文件每分钟有一个文件。出于绘图目的,我想将参考文件添加到数据文件中。所以我想我要找的是如何只检查时间戳的%H:%m部分并进行合并。 我尝试了以下方法:文件夹中有更多的Data1和Data2文件,因此我做的第一件事是查找匹配的Data1文件和Data2文件(Datewise),并将它们放入一个文件中--->;然后我用它制作了一个字典

for data1files in Data1_List:
with open(files) as csv_files:
    reader = csv.reader(csv_files, dialect='excel-tab')
    header_1 = next(csr_reader)
    for rows in csr_reader:
        k=rows[0]
        v=rows[1:4]
        Data1Dict[k]=v

与参考文件Data2相同:

for data2files in Data2_List:
with open(data2files) as csv_files:
    csr_reader = csv.reader(csv_files, dialect='excel-tab')
    header_2 = next(csr_reader)
    for rows in csr_reader:
        k=rows[0]
        v=rows[1:5]
        Data2Dict[k]=v

所以两个字典中的键都是第一行:在Data1中是2015-08-01 07:00,在Data2中是07:00。有没有一种很酷的方法来比较这两个键,以便将引用文件中的日期合并到正确的时间戳上


Tags: 文件csv数据方法infortime时间
1条回答
网友
1楼 · 发布于 2024-04-26 18:42:16

这个

merge_d = {d1k: d1v+Data2Dict.get(d1k[-5:]) for d1k,d1v in Data1Dict.items()
           if d1k[-5:] in Data2Dict }

是包含合并值的字典。你知道吗

例如:

Data1Dict = {'2015-08-01 07:00': ['14.4', '14.4', '14.4', '68'],
             '2015-08-01 08:00': ['15.4', '15.4', '15.4', '69']}

Data2Dict = {'07:00': ['34', '31', '37'],
             '08:00': ['38', '38', '39']}

它产生

{'2015-08-01 07:00': ['14.4', '14.4', '14.4', '68', '34', '31', '37'],
 '2015-08-01 08:00': ['15.4', '15.4', '15.4', '69', '38', '38', '39']}

注意:这是一个残酷的硬编码解决方案,它假设时间有一个位置和固定的表示(即总是hh:mm并且总是在同一个地方)。你知道吗

添加更多详细信息后编辑

如果Data2Dict中可能没有相应的时间(即Data1序列的采样频率高于Data2),事情就更简单了:

merge_d = {d1k: d1v+Data2Dict.get(d1k[-5:],[]) for d1k,d1v in Data1Dict.items() }

输入为

Data1Dict = {'2015-08-01 07:00': ['14.4', '14.4', '14.4', '68'],
             '2015-08-01 07:01': ['12.2', '12.3', '12.4', '99'],
             '2015-08-01 07:02': ['15.4', '15.4', '15.4', '69']}

Data2Dict = {'07:00': ['34', '31', '37'],
             '07:02': ['38', '38', '39']}

它产生

{'2015-08-01 07:00': ['14.4', '14.4', '14.4', '68', '34', '31', '37'],
 '2015-08-01 07:01': ['12.2', '12.3', '12.4', '99'],
 '2015-08-01 07:02': ['15.4', '15.4', '15.4', '69', '38', '38', '39']}

相关问题 更多 >