合并不同长度的.csv文件中的行(python 3.x)
合并不同长度的.csv文件中的行(python 3.x),csv,python-3.x,merge,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。因此,我为File
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
。因此,我为File1
和File2
dict1
和dict2
编写了一本dictionary
,其中k
=时间戳和v
=值。
我的代码如下所示:
merged_files = {d1k: d1v+File2Dic.get(d1k[:],[]) for d1k,d1v in File1Dic.items()}
这给了我一个输出:
合并的\u文件
:
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
您知道如何调整合并代码以获得该结果吗?您可以使用pandas函数,然后用空字符串填充
NaN
值
您可以通过函数将结果写入csv
解释,为什么第4列是1.0
而不是1
:因为
NaN
值被强制转换为float64
谢谢你的帮助。。。什么是
temp=u
和temp1=u
?相反io.StringIO(temp)
你可以使用file1.csv
,类似于io.StringIO(temp1)
o我没有得到它们在哪里打印如果你在csv制表器中有分隔符,你可以使用df=pd.read\u csv(io.StringIO(temp),sep=“\t”,header=None)
这对我有帮助是的。错过了“接受”按钮,并在最后几天离开了,很抱歉延迟
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