我有多个 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)
如果您的日期的第一行是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。
| 归档时间: |
|
| 查看次数: |
58 次 |
| 最近记录: |