python - 在 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
解决方案
您只会看到 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)
推荐阅读
- sql-server - sql中有没有办法按组扫描列,然后在满足规范时返回一个值?
- selenium - Selenium 中的 WebDriverWait(WebDriver driver, long timeoutInSeconds) 是否已弃用?
- javascript - 给出不同答案的模板文字
- javascript - 使用 setTimeout() 方法了解 NodeJs await
- sql-server - 存储过程仅在第一次执行时正确执行
- export - Teradata TPT 错误:EXPORT_OPERATOR:TPT10508:RDBMS 错误 9990:响应行大小超过 64K 字节并且与客户端软件不兼容
- javascript - 当 for 超过某个值时如何重新开始计数?
- vue.js - Vue如何在登录后重定向用户到主要组件
- python - 名称“slugify”未定义
- python - Div 标签内的文本位置正在改变