首页 > 解决方案 > 在 seaprate pandas 数据帧中的路径下导入所有 csv 文件

问题描述

我在一个文件夹中有很多 csv 文件。例如,说 file1.csv 到 file9.csv。我想要的是在单独的数据框中导入这些文件中的每一个。由于所有文件都有不同的列,因此无法将其导入 1 个数据框中。下面的代码循环遍历此文件路径中的所有 csv 文件,并且应该将它们导入不同的数据帧中。但是只有我没有看到 9 个数据帧,但只有 1 个称为 df。为什么这不起作用。我认为 df.name 会完成创建单独数据框的技巧,但事实并非如此。有谁知道我应该改变什么才能完成这项工作。

import pandas as pd
import os
import glob

filepath = r'C:/Source data'

all_files = glob.glob(filepath + "/*.csv")

for filename in all_files:
    name_df = os.path.basename(filename)
    name_df = name_df.replace('.csv','')
    df = pd.read_csv(filename)
    df.name = name_df

标签: pythonpandasdataframe

解决方案


您只会看到 1 个名为 df 的数据帧,因为在循环的每次迭代中,您都会覆盖前一个数据帧。您可以做的是拥有一个数据帧数组或一个数据帧字典

字典法

如果您想按名称访问数据框,这很有用。

import pandas as pd
import glob

filepath = r'C:/Source data'

all_files = glob.glob(filepath + "/*.csv")
df_dict = dict()

for filename in all_files:
    name_df = os.path.basename(filename)
    name_df = name_df.replace('.csv','')
    df_dict[name_df] = pd.read_csv(filename)

列表法

如果您想按索引访问数据帧,这很有用。

import pandas as pd
import glob

filepath = r'C:/Source data'

all_files = glob.glob(filepath + "/*.csv")
df_list = []

for filename in all_files:
    name_df = os.path.basename(filename)
    name_df = name_df.replace('.csv','')
    df = pd.read_csv(filename)
    df_list.append(df)

推荐阅读