【问题标题】:Dynamically create dataframes in pandas by reading a list of csv files通过读取 csv 文件列表在 pandas 中动态创建数据框
【发布时间】:2017-06-16 21:38:42
【问题描述】:

我有一个包含 3 个 csv 文件的文件夹:

a.csv
b.csv
c.csv

要读取此文件夹中的所有 csv 并创建一个数据框,我目前正在这样做:

df1 = pd.read_csv('a.csv')
df2 = pd.read_csv('b.csv')
df3 = pd.read_csv('c.csv')

有什么方法可以自动命名数据框(df1、df2 和 df3)并读取该文件夹中的所有 csv 文件。比如说,我有 10 个 csv 文件,我不想在 pandas 中手动编写 10 个读取语句。

例如,我不想这样写:

df1 = pd.read_csv('a.csv')
......
......
......

df10 = pd.read_csv('j.csv')

谢谢!

【问题讨论】:

标签: python pandas


【解决方案1】:

如果您愿意访问数据帧列表而不是明确声明 df1...dfn,则可以很容易地做到这一点:

root= "YOUR FOLDER"
csvs= []  #container for the various csvs contained in the directory
dfs = []  #container for temporary dataframes

# collect csv filenames and paths 
for dirpath, dirnames, filenames in os.walk(root):
    for file in filenames:
        csvs.append(dirpath + '\\' + file)

# store each dataframe in the list
for f in csvs:
    dfs.append(pd.read_csv(f))    

然后像dfs[0] ... dfs[n]一样访问

【讨论】:

  • 在 OP 的代码中,他知道 df1 对应于名为 'a.csv' 的文件。如果这很重要,我想 op 可以使 dfs 成为字典并通过 dfs[f] = read_csv(f) 添加它们。
【解决方案2】:

您可以创建一个 DataFrames 字典:

import os
import pandas as pd
from glob import glob

dfs = {os.path.splitext(os.path.basename(f))[0]: pd.read_csv(f) for f in glob('*.csv')}
# df1 equivalent dfs['a'] 
dfs['a']

【讨论】:

    【解决方案3】:

    人们可能会否决此解决方案,因为我要求您使用 global 变量。但是,这解决了你的问题。

    dir= 'myDir'
    for root, dirs, filenames in os.walk(dir):
        for a, f in enumerate(filenames):
            fullpath = os.path.join(dir, f)
            globals()['df%s' % str(a+1)] = pd.read_csv(fullpath)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-29
      • 2018-04-14
      • 2017-08-31
      • 2015-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多