如何将多个 CSV 文件导入 Pandas 并连接成一个 DataFrame
Pandas 是 Python 中一个非常流行的数据分析库,它可以处理不同类型的数据,例如 CSV、Excel、SQL 数据库、JSON 和 XML 等。当处理大量数据时,通常会使用多个 CSV 文件来存储数据,此时就需要将它们导入 Pandas 并连接成一个 DataFrame。本文将介绍如何使用 Pandas 将多个 CSV 文件导入并连接成一个 DataFrame。
首先,我们需要导入 Pandas 库和 os 库,os 库用于操作文件。
import pandas as pd
import os
接下来,我们可以通过 os 库获取要导入的 CSV 文件所在的文件夹路径。假设该文件夹路径为 “data”,其中包含 3 个 CSV 文件,分别为 “data1.csv”,”data2.csv” 和 “data3.csv”。我们可以使用 Pandas 的 read_csv() 函数逐个读取这些 CSV 文件,并将它们存储在一个列表中。
folder_path = "data"
csv_files = [f for f in os.listdir(folder_path) if f.endswith('.csv')]
# create an empty list to store data frames
dfs = []
# read CSV files and store them as DataFrames in the list
for file in csv_files:
path = os.path.join(folder_path, file)
df = pd.read_csv(path)
dfs.append(df)
现在,我们已经将所有 CSV 文件读取为单独的 DataFrame,并将它们存储在一个列表中。接下来,我们需要将它们连接成一个 DataFrame。有两种常见的方法来完成此任务,即使用 Pandas 的 concat() 函数或者使用 merge() 函数。
方法一:使用 concat() 函数
Pandas 的 concat() 函数可以将多个 DataFrame 纵向或横向连接。我们可以使用 axis 参数指定连接方向,axis=0 表示纵向连接,axis=1 表示横向连接。在本例中,由于我们想将所有 DataFrame 纵向连接,因此我们应该将 axis 设为 0。我们可以使用 concat() 函数将所有 DataFrame 连接成一个 DataFrame。
# concatenate all data frames vertically
df = pd.concat(dfs, axis=0, ignore_index=True)
在上述代码中,ignore_index 参数表示是否将原始 DataFrame 的索引重置为新的 DataFrame 的连续整数索引。
方法二:使用 merge() 函数
merge() 函数可以将两个 DataFrame 横向连接,我们可以使用此函数将多个 DataFrame 横向连接。假设这些 DataFrame 具有共同的列名。但是,在本例中,DataFrame 具有不同的列名。因此,我们需要使用纵向连接方法,然后使用 merge() 函数。
# concatenate all data frames vertically
df = pd.concat(dfs, axis=0, ignore_index=True)
# merge data frames horizontally
df = df.merge(df1, on='key', how='outer')
df = df.merge(df2, on='key', how='outer')
在上述代码中,我们使用纵向连接方法将所有 DataFrame 链接在一起。然后,我们使用 merge() 函数将所有 DataFrame 横向连接。关键字参数 on 表示连接键,它们必须在所有 DataFrame 中共享。how 参数控制链接方式,包括 “left”,”right”,”outter” 和 “inner” 四种方式。
注意事项:
- 在合并 DataFrame 之前,请确保它们的结构和格式是相同的。
- Pandas 的 read_csv() 函数默认情况下会将第一行作为列名。如果你的 CSV 文件不包含列名,请添加一个关键字参数 header=None。
- 如果你的 CSV 文件分隔符不是逗号,例如制表符或空格,你可以在 read_csv() 函数中指定关键字参数 sep。
- 在将 DataFrame 纵向连接时,每个 DataFrame 的列名必须相同。否则,你可以使用 concat() 函数的 ignore_index 参数将每个新 DataFrame 的列名重置为连续整数。
以上就是如何使用 Pandas 将多个 CSV 文件导入并连接成一个 DataFrame 的方法。希望这篇文章能够帮助你在实际工作中处理数据。