Python – 在Pandas中读取文件夹中的所有CSV文件?
对于数据科学家和分析师而言,读取和处理大量CSV文件是一个非常重要的任务。在Python中,我们可以使用Pandas库来轻松处理CSV文件。那么如何在Pandas中读取文件夹中的所有CSV文件呢?在本篇文章中,我们将介绍三种不同的方法。
方法一:使用os.listdir()和Pandas
首先,我们可以使用Python内置的os模块中的listdir()函数来获取文件夹中所有的CSV文件。然后,我们将所有文件名存储在一个列表中,并使用Pandas的read_csv()函数逐个读取文件并将它们合并在一起。
import os
import pandas as pd
path = 'path/to/folder'
files = os.listdir(path)
files_csv = [f for f in files if f[-4:] == '.csv']
dfs = []
for file in files_csv:
df = pd.read_csv(os.path.join(path, file))
dfs.append(df)
merged_df = pd.concat(dfs, ignore_index=True)
在这段代码中,我们首先指定文件夹的路径,并使用listdir()函数获取所有文件的名称。然后,我们使用列表推导式将所有的CSV文件名保存在一个列表中。接下来,我们创建一个空列表dfs,用于存储我们要从每个CSV文件中读取的DataFrame对象。在循环中,我们使用read_csv()函数逐个读取CSV文件,并将它们附加到dfs列表中。最后,我们使用concat()函数将所有DataFrame对象合并在一起,并使用ignore_index参数重置索引。
方法二:使用glob和Pandas
第二种方法是使用glob模块和Pandas库。glob模块提供了通配符匹配(类似于正则表达式),我们可以使用它来获取我们需要的所有CSV文件的路径。然后,我们可以使用Pandas的read_csv()函数逐个读取文件并将它们合并在一起。
import glob
import pandas as pd
path = 'path/to/folder'
files_csv = glob.glob(path + "/*.csv")
dfs = []
for file in files_csv:
df = pd.read_csv(file)
dfs.append(df)
merged_df = pd.concat(dfs, ignore_index=True)
在这个例子中,我们使用glob.glob()函数获取所有CSV文件的路径,并将它们保存在一个列表中。然后,我们创建一个空列表dfs,用于存储我们要从每个CSV文件中读取的DataFrame对象。在循环中,我们使用read_csv()函数逐个读取CSV文件,并将它们附加到dfs列表中。最后,我们使用concat()函数将所有DataFrame对象合并在一起,并使用ignore_index参数重置索引。
方法三:使用os.walk()和Pandas
第三种方法是使用os模块中的walk()函数来获取文件夹中所有的CSV文件。os.walk()函数可以递归地遍历文件夹中的所有子文件夹,并返回它们的名称。然后,我们可以使用Pandas的read_csv()函数逐个读取文件并将它们合并在一起。
import os
import pandas as pd
path = 'path/to/folder'
dfs = []
for root, dirs, files in os.walk(path):
for file in files:
if file.endswith(".csv"):
df = pd.read_csv(os.path.join(root, file))
dfs.append(df)
merged_df = pd.concat(dfs, ignore_index=True)
在这个示例中,我们使用os.walk()函数遍历文件夹中的所有子文件夹,并获取所有CSV文件的名称。然后,我们使用Pandas的read_csv()函数逐个读取CSV文件,并将它们附加到dfs列表中。最后,我们使用concat()函数将所有DataFrame对象合并在一起,并使用ignore_index参数重置索引。
结论
在Python中,读取文件夹中的所有CSV文件是一个非常常见的任务。我们可以使用os.listdir(),glob.glob()和os.walk()等不同的方法来实现这个任务。使用Pandas库可以使整个过程更加方便和高效,因为它提供了一些方便的函数来读取和处理CSV文件。无论您选择哪种方法,都可以轻松地读取文件夹中的所有CSV文件并将它们合并到一个DataFrame对象中。