2015-11-04 64 views
1

File1:从不同长度(蟒蛇3.X)的.csv文件

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考虑各行的时间戳合并行。所以我写了dictionaryFile1File2dict1dict2k =时间戳和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 

如何我可以调整合并的任何想法代码来得到那个结果

回答

1

你可以用pa ndas函数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 
+0

感谢您的帮助...什么是'temp = u'和'temp1 = u'? –

+1

而不是'io.StringIO(temp)'你可以使用'file1.csv'和类似的'io.StringIO(temp1)' – jezrael

+0

o我没有得到他们在哪里打印 –