2015-09-23 81 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