python - 通过 Pandas 连接(许多)CSV 文件

标签 python pandas csv concatenation

我基本上试图在 Pandas 中连接许多时间序列类型的 csv 文件,我确信我知道如何做到这一点,但显然我不知道。

考虑这个简单的例子:

我们有三个 csv 文件:

文件1.csv=

Alfa, A1, A2, A3, A4
Beta, B1, B2, B3, B4
Gamma, C1, C2, C3, C4

文件2.csv=

Delta, D1, D2, D3, D4
Epsilon, E1, E2, E3, E4
Zeta, F1, F2, F3, F4

文件3.csv=

Eta, G1, G2, G3, G4
Theta, H1, H2, H3, H4
Iota, I1, I2, I3, I4

第一个玩具代码:

[In]:

import pandas as pd
a = pd.read_csv("/Test/file1.csv", header=None)
b = pd.read_csv("/Test/file2.csv", header=None)
c = pd.read_csv("/Test/file3.csv", header=None)
colnames = ["GREEK", "ROW1", "ROW2", "ROW3", "ROW4"]
concatDf = pd.concat([a,b,c], axis=0)
concatDf.columns = colnames
print(concatDf)

[Out]:

     GREEK ROW1 ROW2 ROW3 ROW4
0     Alfa   A1   A2   A3   A4
1     Beta   B1   B2   B3   B4
2    Gamma   C1   C2   C3   C4
0    Delta   D1   D2   D3   D4
1  Epsilon   E1   E2   E3   E4
2     Zeta   F1   F2   F3   F4
0      Eta   G1   G2   G3   G4
1    Theta   H1   H2   H3   H4
2     Iota   I1   I2   I3   I4

不太漂亮,但是做了它应该做的事情。 由于真正的 CSV 文件的名称很长并且文件数量很多,我想我应该让事情对我来说更容易一些。因此第二个玩具代码:

[In]:

import glob
import pandas as pd

 allFiles = glob.glob("/Test/" + "*.csv")
 dfList = []
 for filename in allaFiler:
    df = pd.read_csv(filename)
    dfList.append(df)

 concatDf = pd.concat(dfList, axis=0)
 print(concatDf)

[Out]:

    A1  A2  A3  A4  D1  D2  D3  D4  G1  G2  G3  G4 Alfa   Delta   Eta
0   B1  B2  B3  B4 NaN NaN NaN NaN NaN NaN NaN NaN Beta     NaN   NaN   
1   C1  C2  C3  C4 NaN NaN NaN NaN NaN NaN NaN NaN Gamma    NaN   NaN   
0  NaN NaN NaN NaN  E1  E2  E3  E4 NaN NaN NaN NaN  NaN Epsilon   NaN   
1  NaN NaN NaN NaN  F1  F2  F3  F4 NaN NaN NaN NaN  NaN    Zeta   NaN   
0  NaN NaN NaN NaN NaN NaN NaN NaN  H1  H2  H3  H4  NaN     NaN Theta  
1  NaN NaN NaN NaN NaN NaN NaN NaN  I1  I2  I3  I4  NaN     NaN  Iota

file1.csv、file2.csv 和 file3.csv 是测试 map 中唯一的文件。 我查过documentation ,但我没能找到解释。

我的问题如下:

  1. 为什么代码 2 不会产生与代码 1 相同的结果?我显然错过了一些非常基本的东西,所以请帮助我了解发生了什么。
  2. 我需要做哪些更改才能使代码 2 产生与代码 1 相同的结果?

提前致谢!

最佳答案

看来您的所有数据框都有不同的名称。这会导致 pd.concat 在串联期间数据帧未对齐。

解决方案是在串联之前对每个名称进行一致命名。读取数据帧时,使用 names 参数指定列名称。

dfList = []
for filename in allaFiler:
   df = pd.read_csv(filename, header=None, names=list('ABCD'))
   dfList.append(df)

关于python - 通过 Pandas 连接(许多)CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47383117/

相关文章:

python - 检测文件是否是Python中的图像

python - 使用 python 和 gtk 3 将 gtk 应用程序主题更改为默认主题

python - 在python中查找重叠的时间段

xml - Python - 将 XML 转换为 CSV

python - 为特定列写带双引号的 csv 文件不起作用

python - 球体Python上的密度图

python - 为多类道路分割实现 U-net

python - pandas - 多索引切片未按预期调整索引值

Python - 如果也有字符串值,如何获取列的平均值

php - 将逗号分隔值插入 MySQL 表字段