2015-09-23 83 views
2

数据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 

,如果有对于时间戳没有参考文件我只需要一个数据1线在现场如此:

  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 

的数据2文件是一个参考文件,与条目,每15分钟,同时将数据1文件具有一个文件的每一分钟。为了绘图目的,我想将参考文件添加到数据文件中。所以我想我要的是如何检查只%H:时间戳%M部分,做了合并。 我试过如下:有在文件夹更多的数据1和数据2文件,所以我做的第一件事,就是找一个数据1文件和数据2文件相匹配(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 

相同的参考文件数据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和数据2是07:00 。有没有这两个键,以便合并右侧时间戳

+0

你在'头-1 =下一个...'语法错误。使用下划线'_' – Pynchia

+0

THX固定它强调 –

回答

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和总是在同一个地方)。经过进一步的细节

EDIT加入

在情况下,可以在Data2Dict没有相应的时间(即,数据1序列具有比数据2更高的采样频率)的东西更容易:

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

感谢的作品近乎完美。我想我的问题写错了:参考文件(Data2)每15分钟只有数据,而Data1文件每分钟有数据。我需要一个'合并',其中Data1的数据被添加到Data1的那些时间戳点上,而Data1的时间戳没有Data2数据我仍然需要文件中的数据行 –

+0

我编辑了我的问题:-) –

+1

确定,我编辑了我的答案 – Pynchia