使用不同的TimeStamp合并字典

时间:2015-09-23 08:14:31

标签: 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分钟有一个条目,而数据1文件每分钟有一个文件。出于绘图目的,我想将参考文件添加到数据文件中。所以我想我正在寻找的是如何仅检查时间戳的%H:%M部分并进行合并。 我尝试了以下内容:文件夹中有更多Data1和Data2文件,所以我做的第一件事就是寻找匹配(Datewise)的Data1文件和Data2文件并将它们放在文件中--->然后我用它做了一个词典

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

参考文件数据2:

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。是否有一种很酷的方法来比较这两个键,以便在正确的时间戳上合并参考文件中的日期

1 个答案:

答案 0 :(得分:2)

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']}