读取多个csv文件,将文件名列表连接到单个DataFram中

2024-04-19 14:02:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我在目录中有多个csv文件,我会循环到csv文件,找到一个文件名列表,读取每个文件名,并将它们连接到一个数据帧中。对于单个数据集,只需读入数据集即可。

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

  • 2013年nba.csv
  • 2014年
  • 2015年
  • 2013年篮球.csv
  • 2014年篮球.csv
  • 2015年足球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中的新手,我尝试在“文件”中为“nba”创建一个DF,但没有成功。


Tags: 文件csv数据path目录df列表文件名
1条回答
网友
1楼 · 发布于 2024-04-19 14:02:15

更新:

经过改进的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

相关问题 更多 >