File1:
2015-01-01 07:00 1 1 1 1
2015-01-01 07:01 1 1 1
2015-01-01 07:02 1 1 1 1
File2:
2015-01-01 07:00 2 2
2015-01-01 07:01 2 2
2015-01-01 07:02 2 2
考虑到每行的时间戳,我想将File2
中的文件合并到File1
。所以我为dictionary
和File1
File2
和dict1
写了dict2
k
=时间戳和v
=值。
我的代码看起来像这样:
merged_files = {d1k: d1v+File2Dic.get(d1k[:],[]) for d1k,d1v in File1Dic.items()}
给我一个输出:
merged_files
:
2015-01-01 07:00 1 1 1 1 2 2
2015-01-01 07:01 1 1 1 2 2
2015-01-01 07:02 1 1 1 1 2 2
我希望:
2015-01-01 07:00 1 1 1 1 2 2
2015-01-01 07:01 1 1 1 2 2
2015-01-01 07:02 1 1 1 1 2 2
关于我如何调整合并代码以获得该结果的任何想法
答案 0 :(得分:1)
您可以使用pandas函数merge,然后使用空字符串填充NaN
值。
您可以通过函数to_csv将结果写入csv。
解释,为什么在第4列中1.0
代替1
:
因为NaN
值被强制转换为float64。 link
import pandas as pd
import numpy as np
import io
temp=u"""2015-01-01 07:00;1;1;1;1
2015-01-01 07:01;1;1;1;
2015-01-01 07:02;1;1;1;1"""
df = pd.read_csv(io.StringIO(temp), sep=";", header=None)
print df
temp1=u"""2015-01-01 07:00;2;2
2015-01-01 07:01;2;2
2015-01-01 07:02;2;2"""
df1 = pd.read_csv(io.StringIO(temp1), sep=";", header=None)
print df1
#merge by first column - by dates
result = pd.merge(df, df1, on=0)
#fill NaN values by empty string
result = result.fillna('')
print result
# 0 1_x 2_x 3 4 1_y 2_y
#0 2015-01-01 07:00 1 1 1 1 2 2
#1 2015-01-01 07:01 1 1 1 2 2
#2 2015-01-01 07:02 1 1 1 1 2 2
print result.to_csv(header=False, index=False)
#2015-01-01 07:00,1,1,1,1.0,2,2
#2015-01-01 07:01,1,1,1,,2,2
#2015-01-01 07:02,1,1,1,1.0,2,2