将多个 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
我有多个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