首页 > 解决方案 > 从文件名更改日期格式并加入多个 csv 文件中的每小时数据

问题描述

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

"cd191108.csv", "cd191120.csv"

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

GMT + TZ;Value
10:43:00;10
10:45:00;20
...

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

Time;value
2019-11-08 10:43:00;10

我通过以下方式完成了它:

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   

(参考How to add a date from filename to a time column to make datetime column? Python Pandas

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

2008-11-19 10:43:00

而不是我所期望的

2019-11-08 10:43:00

我尝试使用“to_datetime”进行更正,但它不起作用..

df['Time'] =  pd.to_datetime(df['Time']

标签: pythonpandas

解决方案


如果你的日期的第一行是2008-11-19 10:43:00你的预期2019-11-08 10:43:00,那么它显然错误地吃了额外的一行作为标题,所以尝试调整:

pd.read_csv(..., header=[0])`

让它不吃第一排/第二排。

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


推荐阅读