将多个csv文件导入熊猫并将它们合并到一个DataFrame中

时间:2019-10-07 17:24:50

标签: python pandas csv dataframe concat

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

希望将一个文件夹中的多个csv文件读取到大熊猫中,然后将它们合并到一个DataFrame中。

但是,

无法弄清楚。

问题在于,DataFrame的最终输出(即frame = pd.concat(li, axis=0, ignore_index=True))将所有列(即 43列)合并为一列< strong>(请参阅所附图片) 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 POLYGONE TI006093 2019年4月22日1.5                     C0000001 ALDI TI006098 2019年4月22日0.7                     C0000001 ALDI TI006098 2019年4月22日2.4                     C0000001 ALDI 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)

1 个答案:

答案 0 :(得分:1)

解决方案

您可以使用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