我在Windows中使用python 3.0。
我有2个csv文件
file1.csv
0, 10,12
0,11,12
1,15,12
2, 17,12
file2.csv
0, 2, 1
1,22, 1
3, 11, 1
output.csv
0, 10,12
0,11,12
0, 2, 1
1,15,12
1,22, 1
2, 17,12
3, 11, 1
我尝试了以下代码
a = pd.read_csv('file1.csv')
b = pd.read_csv('file2.csv')
c = pd.concat([a, b], join='outer')
c.to_csv("Output.csv", index = False)
但我的输出是
0, 10,12
0,11,12
1,15,12
2, 17,12
0, 2, 1
1,22, 1
3, 11, 1
请你给我一些指示。我是python的新手。
答案 0 :(得分:1)
您可以使用pandas连接和排序它们:
df = pd.concat([a, b]).astype('str')
df = df.sort_values(list(df.columns))
df.to_csv('Output.csv', index=False)
答案 1 :(得分:0)
这不会创建输出文件,但会演示heapq.merge
如何提供帮助:
from heapq import merge
inputs = [file(f) for f in ['file1.csv', 'file2.csv']]
for line in merge(*inputs):
print line,
使用样本数据生成
0, 10,12
0, 2, 1
0,11,12
1,15,12
1,22, 1
2, 17,12
3, 11, 1
然而,这与初始行的排序中的样本输出不同:
0, 10,12
0,11,12
0, 2, 1
但我不确定如何产生这种排序。示例输出行似乎没有按字符或数字列排序(字段的数字排序可能会先放置0, 2, 1
。)
编辑:看起来行的排序就像空格不存在一样。以下示例:
from heapq import merge
def reader(f):
for line in file(f):
yield line.replace(' ',''), line
inputs = [reader(f) for f in ['file1.csv', 'file2.csv']]
for pair in merge(*inputs):
print pair[1],
生成此排序:
0, 10,12
0,11,12
0, 2, 1
1,15,12
1,22, 1
2, 17,12
3, 11, 1