我有多个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)
答案 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