从文件名导入多个csv时创建日期索引

时间:2019-02-10 04:35:49

标签: pandas dataframe

我在一个文件夹中有250个csv文件,我使用以下代码将它们导入到单个数据框中:

files = "~/*.csv"
df = pd.concat([pd.read_csv(f, dtype='str') for f in glob.glob(files)], ignore_index=True)

我的问题是我没有任何文件中的日期信息,该日期在文件名中如“ LSH_190207”中提到,该文件名为7-Feb-2019。 有没有一种方法可以在导入文件时(最好将其作为索引)在数据框中包含此信息。 或者至少创建一个包含文件名的新列,以便以后可以将其拆分和格式化为日期列。

2 个答案:

答案 0 :(得分:1)

是的,

假设文件列表为

files = glob.glob('*.csv')
#['file1_LSH_190207_something.csv', 'file2_LSH_190208_something.csv']
#[f.split("_")[2] for f in files] gives ['190207', '190208']

这将创建一个日期列,其日期值为字符串:

df= pd.concat([pd.read_csv(f, dtype='str').assign(date= f.split("_")[2]) for f in files],\
                                                                  ignore_index=True)

示例输出:

   A  B  C    date
0  1  2  3  190207
1  4  5  6  190207
2  5  6  8  190208
3  9  1  3  190208

发布此信息后,您可以执行以下操作以将日期转换为自己的格式:

pd.to_datetime(df['date']).dt.strftime('%d-%b-%Y')

0    07-Feb-2019
1    08-Feb-2019
2    09-Feb-2019

答案 1 :(得分:1)

在Lins理解中创建Datetimeindex并将其传递给concat中的参数keys,只需用MultiIndex除去reset_index的第二级:

idx = pd.to_datetime([f.split("_")[2] for f in files])
print (idx)

df = pd.concat([pd.read_csv(f, dtype='str') for f in files], 
                keys = idx).reset_index(level=1, drop=True)