Python 合并具有不同时间戳的词典
数据1: 数据2:Python 合并具有不同时间戳的词典,python,Python,数据1: 数据2: 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 我想合并这两个文件,以便获得输出: Time
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
我想合并这两个文件,以便获得输出:
Time Header Header Header Header Header
07:00 34 31 37 51 72
07:02 32 31 17 56 12
如果没有时间戳的参考文件,我只需要字段中的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
Data2文件是一个参考文件,每15分钟有一个条目,而Data1文件每分钟有一个文件。出于打印目的,我想将参考文件添加到数据文件中。所以我想我要寻找的是如何只检查时间戳的%H:%m部分并进行合并。
我尝试了以下方法:文件夹中有更多的Data1和Data2文件,所以我做的第一件事是查找匹配(Datewise)的Data1文件和Data2文件,并将它们放在一个文件中--->然后我用它制作了一个字典
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的情况相同:
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
因此,两个字典中的键都是第一行:在Data1中是2015-08-01 07:00
,在Data2中是07:00
。有没有一种很酷的方法来比较这两个键,以便合并右侧时间戳上参考文件中的日期
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
是一个合并了值的字典
例如:
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']}
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']}
注意:这是一个残酷的硬编码解决方案,它假设时间具有位置和固定的表示(即总是hh:mm并且总是在同一个位置)
添加更多详细信息后编辑
如果Data2Dict中可能没有相应的时间(即Data1序列的采样频率高于Data2),那么事情就更容易了:
{'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']}
输入
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 08:00': ['15.4', '15.4', '15.4', '69']}
Data2Dict = {'07:00': ['34', '31', '37'],
'08:00': ['38', '38', '39']}
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']}
header-1=next…
中出现语法错误。使用下划线。
thx将其固定为下划线,效果近乎完美。我想我的问题写错了:引用文件(Data2)每15分钟才有一次数据,而Data1文件每分钟有一次数据。我需要一个合并
,其中来自Data2的数据添加到Data1的时间戳点上,当Data1的时间戳没有Data2数据时,我仍然需要文件中在线的数据。您确定输入/输出数据反映了您的要求吗?我的解决方案满足了你的话,但不是数据…嗯。。。我试过你的编辑版本,它正是我需要的代码。我只需要在一个cvs文件中包含所有内容,这样我就可以更容易地绘制这些内容。我所需要的只是从Data2复制行,并将其复制到Data1行的末尾。由于文件太多(Data1和Data2),手动操作不起作用。您介意解释合并过程吗?如果我想合并具有相同时间的词典,我会在哪里更改日期格式?上面的词典理解非常简单:对于Data1Dict(键和值)的所有项关联Dict2Dict中元素的值,该元素的键等于当前键的最后5个字符。如果没有,则关联一个空列表(即保持当前值不变)。关于格式,我不确定我是否理解您的意思