【问题标题】:How to merge two csv files line by line如何逐行合并两个csv文件
【发布时间】:2017-09-16 10:34:50
【问题描述】:

我在 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

输出.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 新手。

【问题讨论】:

  • 这是什么逻辑?行应该如何排序?
  • 所以你想把它们并排放置?我会用<left or right>_array = np.genfromtxt('input_filename.csv', delimiter=',') 阅读,将它们与out = np.hstack([left_array, right_array]) 并排放置,然后用np.savetxt('output_filename.csv', out, delimiter=',') 写入文件。
  • 您还可以在savetxt 中指定格式,请参阅文档。请注意,这仅在两个输入具有相同行数的情况下才有效,而您的示例数据中并非如此。请更清楚地说明您要做什么(提出想法以及给定的输入和预期输出)。
  • 你的输出正确吗?几乎看起来你想交错这两个文件,但不清楚为什么文件之间的模式是 1、1、2、1、2、1、2。

标签: python csv


【解决方案1】:

您可以使用 pandas 对它们进行连接和排序:

df = pd.concat([a, b]).astype('str')

df = df.sort_values(list(df.columns))

df.to_csv('Output.csv', index=False)

【讨论】:

    【解决方案2】:

    这不会创建输出文件,但它演示了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
    

    【讨论】:

      猜你喜欢
      • 2013-04-29
      • 2020-07-22
      • 2020-06-22
      • 1970-01-01
      • 2013-06-19
      • 1970-01-01
      • 2018-06-16
      • 2016-07-30
      • 1970-01-01
      相关资源
      最近更新 更多