通过读取csv文件列表在pandas中动态创建数据帧

时间:2017-06-16 21:38:43

标签: python pandas

我有一个包含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')

谢谢!

3 个答案:

答案 0 :(得分:2)

如果您愿意访问数据帧列表而不是明确声明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]

答案 1 :(得分:1)

您可以创建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']

答案 2 :(得分:0)

因为我要求您使用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)