读取包含非标准时间戳列的大型csv文件

2024-04-26 12:24:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图读取一个包含如下数据的csv文件:

data.csv:

time,value
12/31/2015 7:00:00 PM,275.9271
12/31/2015 7:00:02 PM,278.559
12/31/2015 7:00:10 PM,277.5949
12/31/2015 7:00:12 PM,270.0564

我的问题是有很多数据,如果我试图读取文件,同时告诉读者解析时间列,如:

df = pd.read_csv('data.csv', parse_dates = ['time'])

它非常慢。另一方面,如果我读取数据,然后尝试转换时间列,速度也很慢:

df['time'] = pd.to_datetime(df.time)

环顾网络之后,解决方案似乎是指定时间的格式,但这失败了,因为月份和小时缺少零填充:

pd.to_datetime(df.time,format='%b/%d/%Y %H:%M:%S %p')

ValueError: time data '10/26/2016 7:00:01 PM' does not match format '%b/%d/%Y %H:%M:%S %p' (match)

有没有办法使格式字符串与非标准数据相匹配?或者加速一种自动识别方法?谢谢您!你知道吗


Tags: 文件csvto数据formatdfdatadatetime
1条回答
网友
1楼 · 发布于 2024-04-26 12:24:40

我认为%b应该是%m?你知道吗

%b Month as locale’s abbreviated name.

%m Month as a zero-padded decimal number.

>>> from datetime import datetime
>>> d = datetime.strptime('12/31/2015 7:00:00 PM', '%b/%d/%Y %H:%M:%S %p')
ValueError: time data '12/31/2015 7:00:00 PM' does not match format '%b/%d/%Y %H:%M:%S %p'
>>> d = datetime.strptime('12/31/2015 7:00:00 PM', '%m/%d/%Y %I:%M:%S %p')
>>> d
datetime.datetime(2015, 12, 31, 19, 0)

我发现自己经常回到这个网站:http://strftime.org/

或者只是Python文档:https://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior

示例

import pandas as pd

df = pd.DataFrame({'time': {0: '12/31/2015 7:00:00 PM',
                            1: '12/31/2015 7:00:02 PM',
                            2: '12/31/2015 7:00:10 PM',
                            3: '12/31/2015 7:00:12 PM'},
                   'value': {0: 275.9271, 1: 278.559, 2: 277.5949, 3: 270.0564}})

df['time'] = pd.to_datetime(df['time'], format='%m/%d/%Y %I:%M:%S %p')

#                  time     value
# 0 2015-12-31 19:00:00  275.9271
# 1 2015-12-31 19:00:02  278.5590
# 2 2015-12-31 19:00:10  277.5949
# 3 2015-12-31 19:00:12  270.0564

相关问题 更多 >