我在一个文件夹中有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
。
有没有一种方法可以在导入文件时(最好将其作为索引)在数据框中包含此信息。
或者至少创建一个包含文件名的新列,以便以后可以将其拆分和格式化为日期列。
答案 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)