读取多个csv文件,将文件名列表连接成一个单一的DataFrame

时间:2016-03-13 18:03:13

标签: python csv pandas dataframe

我在目录中有多个csv文件,我将循环到csv文件找到文件名列表并读取每个文件并将它们连接成一个数据框。如果是单个,只需读取数据集。

这是我目录中的csv文件示例:

  • 2013_nba.csv
  • 2014_nba.csv
  • 2015_nba.csv
  • 2013_basketball.csv
  • 2014_basketball.csv
  • 2015_soccer.csv

这是我到目前为止所拥有的。但这基本上读取所有csv文件并将它们连接成一个DF。我需要帮助,如何循环查找字符串列表(csv)

path = 'C:\\Users\csvfiles\\'
csvFiles = glob.glob(path + "/*.csv")

list_ = []

for files in csvFiles:
     df = pd.read_csv(files, index_col=None, header=0)
     list_.append(df)

frame = pd.concat(list_, ignore_index=True)

我是python中的新手,我尝试“for”for nba“in files”将所有csv文件名称中的“nba”拉入然后制作一个DF,但是没有成功。

1 个答案:

答案 0 :(得分:4)

<强>更新

get_merged_csv()函数的一点改进版本,可以将参数传递给pd.read_csv()

import os
import glob
import pandas as pd

def get_merged_csv(flist, **kwargs):
    return pd.concat([pd.read_csv(f, **kwargs) for f in flist], ignore_index=True)

path = 'C:/Users/csvfiles'
fmask = os.path.join(path, '*nba*.csv')

df = get_merged_csv(glob.glob(fmask), index_col=None, usecols=['rank', 'name'])

print(df.head())

旧版

import os
import glob
import pandas as pd

path = 'C:/Users/csvfiles'
#fmask = '*.csv'

def get_merged_csv(path, fmask):
    return pd.concat([pd.read_csv(f, index_col=None, header=0)
                      for f in glob.glob(os.path.join(path, fmask))]
           )

df_list = [get_merged_csv(path, fmask)
           for fmask in ['*nba.csv', '*basketball.csv', '*soccer.csv']]

df_list将有三个DF:df_list[0] - NBA,df_list[1] - 篮球,df_list[1] - 足球

或者你可以将它们放入字典中:

df_dict = {}
df_dict['nba'] = get_merged_csv(path, '*nba.csv')
df_dict['basketball'] = get_merged_csv(path, '*basketball.csv')
df_dict['soccer'] = get_merged_csv(path, '*soccer.csv')

一些解释:

get_merged_csv(path, fmask)函数读取list comprehension循环中的CSV文件,此DF列表将传递给pd.concat()函数,该函数将返回单个连续DF