循环遍历目录中的文件,在pandas

时间:2015-05-22 20:31:00

标签: python pandas

我的所有文件都有以下标题,它们可以延续几年。我希望能够读取每个文件,然后将文件名中的日期添加为列。

文件类型截至2015-04-01.csv

path = 'C:\\Users\\'  
filelist = os.listdir(path)     #All of my .csv files I am working with
file_count = len(filelist)      #I thought I could do a for loop and use this as a the range
df = Series(filelist)           #I just added this because I couldn't get the date from a list
date_name = df.str[15:-4]       #This gives me the date 

所以我试过的是:

for file in filelist:
    df = pd.read_csv(file)

现在我想从文件名中取出date_name并添加一个名为date的列。每个文件都完全相同,但我想跟踪一段时间内的变化,唯一的日期就是文件名。

然后我会追加它。

path = 'C:\\Users\\'
filelist = glob.glob(path + "/*.csv")
frame = pd.DataFrame()
list = []
for file in filelist:
    df = pd.read_csv(file)
    list_.append(df)
frame = pd.concat(list)

如何将date_name添加到文件/数据框? 1)读取文件,2)根据文件名添加日期列,3)读取下一个文件,4)添加日期列,5)追加,6)重复路径中的所有文件

编辑--- 我想我有办法 - 这是最好的方法吗?有人可以解释list = []正在做什么,这样做了吗?

path = 'C:\\Users\\'
filelist = os.listdir(path) 
list = []
frame = pd.DataFrame()
for file in filelist:
    df2 = pd.read_csv(path+file)
    date_name = file[15:-4]
    df2['Date'] = date_name
    list.append(df2)
frame = pd.concat(list)

1 个答案:

答案 0 :(得分:1)

这似乎是一种合理的方法。 pd.concat获取一个pandas对象列表并连接它们。循环浏览文件时,append会将每个frame添加到列表中。我看到有两件事要改变。

  1. 您不需要frame = pd.DataFrame()。当您将dataframes附加到列表时,它没有做任何事情。
  2. 我将变量list的名称更改为其他名称。也许是frames,因为它描述了内容并且并不意味着什么。