将多个 csv 文件导入 pandas 并将它们合并为一个 DataFrame

Importing multiple csv files into pandas and merge them into one DataFrame

有多个csv文件(每个文件包含N行(例如,1000行) 和43 列)

想从文件夹中读取多个 csv 文件到 pandas 并将它们合并到一个 DataFrame 中。

虽然没弄明白。

问题在于, DataFrame 的最终输出(即 frame = pd.concat(li, axis=0, ignore_index=True) )合并了所有列(即 43 列) 成一列 (见附图) Screenshot of the code

所选行和列的示例(文件一)

               Client_ID    Client_Name  Pointer_of_Bins   Date        Weight
                C0000001       POLYGONE      TI006093     12/03/2019   0.5
                C0000001       POLYGONE      TI006093     12/03/2019   0.6
                C0000001       POLYGONE      TI006093     12/03/2019   1.4
                C0000001       POLYGONE      TI006897     14/03/2019   2.9

所选行和列的示例(文件二) Client_ID Client_Name Pointer_of_Bins 日期重量 C0000001 多边形 TI006093 22/04/2019 1.5 C0000001 阿尔迪 TI006098 22/04/2019 0.7 C0000001 阿尔迪 TI006098 22/04/2019 2.4 C0000001 阿尔迪 TI006898 24/04/2019 1.9

预期的输出将如下所示(合并多个文件可能包含数千行和几列,因为附加数据只是一个示例,而实际的 csv 文件可能包含数千行和超过 45每个文件中的列)

               Client_ID    Client_Name  Pointer_of_Bins   Date        Weight
                C0000001       POLYGONE      TI006093     12/03/2019   0.5
                C0000001       POLYGONE      TI006093     12/03/2019   0.6
                C0000001       POLYGONE      TI006093     12/03/2019   1.4
                C0000001       POLYGONE      TI006897     14/03/2019   2.9   
                C0000001       POLYGONE      TI006093     22/04/2019   1.5
                C0000001       ALDI          TI006098     22/04/2019   0.7
                C0000001       ALDI          TI006098     22/04/2019   2.4
                C0000001       ALDI          TI006898     24/04/2019   1.9                                                             

TO Download the two CSV files, click here (dummy data

这是我到目前为止所做的:

import pandas as pd
import glob
path = r'C:\Users\alnaffakh\Desktop\doc\Data\data2\Test'
all_files = glob.glob(path + "/*.csv")
li = []
for filename in all_files:
    df = pd.read_csv(filename, sep='delimiter', index_col=None, header=0)
  # df = pd.read_csv(filename, sep='\t', index_col=None, header=0)
    li.append(df)
frame = pd.concat(li, axis=0, ignore_index=True)

解决方案

您可以使用 pandas.concat 递归连接 .csv 文件内容。
事实上,我看到你用过它,你对 concat 的应用对我来说似乎很好。尝试调查您阅读的各个数据帧。您的列可以合并为一个列的唯一方法是您没有提及正确的分隔符。

import pandas as pd

dfs = list()
for filename in filesnames:    
    df = pd.read_csv(filename)    
    dfs.append(df)
frame = pd.concat(dfs, axis=0, ignore_index=True)
df.head()

带有虚拟数据的示例

由于可用的虚拟数据还不是文本格式,我只使用我制作的一些虚拟数据。

import pandas as pd
from io import StringIO # needed for string to dataframe conversion

file1 = """
Col1    Col2    Col3    Col4    Col5
1   ABCDE   AE10    CD11    BC101F
2   GHJKL   GL20    JK22    HJ202M
3   MNPKU   MU30    PK33    NP303V
4   OPGHD   OD40    GH44    PG404E
5   BHZKL   BL50    ZK55    HZ505M
"""

file2 = """
Col1    Col2    Col3    Col4    Col5
1   AZYDE   AE10    CD11    BC100F
2   GUFKL   GL24    JK22    HJ207M
3   MHPRU   MU77    PK39    NP309V
4   OPGBB   OE90    GH41    PG405N
5   BHTGK   BL70    ZK53    HZ508Z
"""

将数据作为单独的数据帧加载,然后将它们连接起来。

df1 = pd.read_csv(StringIO(file1), sep='\t')
df2 = pd.read_csv(StringIO(file2), sep='\t')
print(pd.concat([df1, df2], ignore_index=True))

输出

   Col1   Col2  Col3  Col4    Col5
0     1  ABCDE  AE10  CD11  BC101F
1     2  GHJKL  GL20  JK22  HJ202M
2     3  MNPKU  MU30  PK33  NP303V
3     4  OPGHD  OD40  GH44  PG404E
4     5  BHZKL  BL50  ZK55  HZ505M
5     1  AZYDE  AE10  CD11  BC100F
6     2  GUFKL  GL24  JK22  HJ207M
7     3  MHPRU  MU77  PK39  NP309V
8     4  OPGBB  OE90  GH41  PG405N
9     5  BHTGK  BL70  ZK53  HZ508Z