从文件名更改日期格式并加入多个 csv 文件中的每小时数据

bla*_*ans 5 python pandas

我有多个 csv 文件,其名称表示日期,例如

"cd191108.csv", "cd191120.csv"
Run Code Online (Sandbox Code Playgroud)

并且 csv 文件包含这样的数据:

GMT + TZ;Value
10:43:00;10
10:45:00;20
...
Run Code Online (Sandbox Code Playgroud)

我想要做的是将所有 csv 文件合并到 Pandas 中的一个数据帧中,但“时间”列指示来自文件名的日期和来自文件内容的小时,例如

Time;value
2019-11-08 10:43:00;10
Run Code Online (Sandbox Code Playgroud)

我通过如下方式完成:

import os
import pandas as pd
path = os.getcwd()
files = os.listdir(path)

files_csvf = [f for f in files if f[-3:] == 'csv']
files_csv

dfs=[]
for f in files_csv:
    data = pd.read_csv(f,sep=";",index_col=False)
    data['datetime']=pd.to_datetime(f[2:8])+pd.to_timedelta(data['GMT + TZ'])
    data=data.drop('GMT + TZ',axis=1)
    dfs.append(data)
df=pd.concat(dfs,ignore_index=True)
df   
Run Code Online (Sandbox Code Playgroud)

(参考如何将文件名中的日期添加到时间列以制作日期时间列?Python Pandas

但是,“时间”列的结果如下:

2008-11-19 10:43:00
Run Code Online (Sandbox Code Playgroud)

而不是我所期望的

2019-11-08 10:43:00
Run Code Online (Sandbox Code Playgroud)

我尝试用“to_datetime”来纠正,但它不起作用..

df['Time'] =  pd.to_datetime(df['Time']
Run Code Online (Sandbox Code Playgroud)

smc*_*mci 0

如果您的日期的第一行是2008-11-19 10:43:00您所期望的2019-11-08 10:43:00,那么它显然错误地将额外的行作为标题,因此请尝试调整:

pd.read_csv(..., header=[0])`
Run Code Online (Sandbox Code Playgroud)

让它不吃第一/第二行。

请注意,这是列表[0]而不是数字0