【问题标题】:How to merge multi csv files line by line python如何逐行合并多个csv文件python
【发布时间】:2020-07-22 14:00:59
【问题描述】:

我希望代码能够逐行合并输出的 csv 文件。它会一个接一个地写第一行,然后一个接一个地写第二行。

import numpy as np, pandas as pd, os, glob
path = (r'E:\csvfile')
all_files = glob.glob(path + "/*.csv")
li = []

for filename in all_files:
    df = pd.read_csv(filename, index_col=False, header=0)
    li.append(df)

frame = pd.concat(li,axis=0,names=None)
frame.to_csv (r'E:\csvfile\exportC.csv', mode = 'w', index=False)

我尝试了具有不同参数的较短代码。 >

import pandas as pd, glob
df = pd.concat(map(pd.read_csv, glob.glob(r'E:\csvfile/*.csv')),axis=0)
df.to_csv (r'E:\csvfile\exportC.csv',mode = 'w', index=False) 

file1.csv

0, 10,12
0,11,12
1,15,12

file2.csv

0, 2, 1
1,22, 1
3, 11, 1

file3.csv

0, 4, 6
9, 14, 13
5, 6, 2

预期的输出。

0, 10,12
0, 2, 1
0, 4, 6
0,11,12
1,22, 1
9, 14, 13
1,15,12
3, 11, 1
5, 6, 2

从现在开始谢谢你。

【问题讨论】:

  • 我怀疑预期的输出有错误。第二行不应该是0, 2, 1吗?

标签: python pandas numpy csv


【解决方案1】:

您可以先连接三个单独的数据框df1df2df3,然后使用sort_index pandas 方法根据索引号重新组织您的数据框:

import pandas as pd
df1=pd.read_csv(file1.csv)
df2=pd.read_csv(file2.csv)
df3=pd.read_csv(file3.csv)
df=pd.concat([df1, df2, df3], axis=0).sort_index() 

这将返回:

   0   1   2
0  0  10  12
0  0   2   1
0  0   4   6
1  0  11  12
1  1  22   1
1  9  14  13
2  1  15  12
2  3  11   1
2  5   6   2

【讨论】:

  • 非常感谢您的回复。它解决了我的问题,但它没有按顺序写行,它在自身内部以混合方式写入。有解决办法吗?
【解决方案2】:

您可以为每个 CSV 制作一个数据框,并编写一个循环和追加行的函数。如果 CSV 很大,您可以分块读取它们。

while i < df_length:
  df = df.append(df1.iloc[[i],:]).append(df2.iloc[i,:]).append(df3.iloc[i,:])
  i += 1

【讨论】:

  • 非常感谢您的回复。它解决了我的问题,但它没有按顺序写行,它在自身内部以混合方式写入。有解决办法吗?
猜你喜欢
  • 2020-06-22
  • 1970-01-01
  • 2013-06-19
  • 2016-04-19
  • 1970-01-01
  • 2017-05-05
  • 2013-04-29
  • 2018-06-11
  • 1970-01-01
相关资源
最近更新 更多