【问题标题】:change date format from filename and join into hourly data in multiple csv files从文件名更改日期格式并加入多个 csv 文件中的每小时数据
【发布时间】:2020-11-07 18:50:55
【问题描述】:

我有多个名称表示日期的 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']

【问题讨论】:

  • 通过yearfirst=True) so df['Time'] = pd.to_datetime(df['Time'], yearfirst=True)`
  • 谢谢,大卫!我也意识到 df['Time'] = pd.to_datetime(df['Time'], format='%y%m%d') 也可以!很高兴解决我的第一份工作;)

标签: python pandas


【解决方案1】:

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

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

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

请注意,这是列表 [0] 而不是号码 0

【讨论】:

    猜你喜欢
    • 2014-01-09
    • 2012-12-31
    • 2019-04-09
    • 2017-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-06
    • 1970-01-01
    相关资源
    最近更新 更多