合并具有不同长度的.csv文件中的行(python 3.x)

时间:2015-11-04 11:18:07

标签: csv python-3.x merge

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。所以我为dictionaryFile1 File2dict1写了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

关于我如何调整合并代码以获得该结果的任何想法

1 个答案:

答案 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