Python 读取具有非标准时间戳列的大型csv文件
我正在尝试读取包含以下数据的csv文件:Python 读取具有非标准时间戳列的大型csv文件,python,pandas,datetime,Python,Pandas,Datetime,我正在尝试读取包含以下数据的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 = ['ti
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:时间数据“10/26/2016 7:00:01 PM”与格式“%b/%d/%Y%H:%M:%S%p”不匹配(匹配)
有没有办法使格式字符串与非标准数据匹配?或者加速一种自动识别方法?谢谢大家! 我认为
%b
应该是%m
%b
Month作为区域设置的缩写名称
%m
月份为零填充十进制数
我发现自己经常回到这个网站:
或者只是Python文档:
示例
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
你的秒数是零。你的例子第10个月和第12个月永远不会是零填充的。在任何情况下,即使缺少预期的零填充,strtime也会尝试解析。你是对的,我的意思是说,小时,我会编辑问题。在大多数情况下,无论是否有填充空格,strtime都会正确处理。一个例外是没有分隔符的邮戳,这本身就很模糊。例如:
1012017
可能意味着1/01/2017
或10/1/2017
,甚至可能是10/12/017
。但是人类也无法解析这些信息。%H
也应该被%I
替换H代表24小时制,但它使用的是am/pm。@HåkenLid很棒的一点,我错过了,但现在将更新答案!请记住将输出时间从7小时改为19小时。@PaulFleming很乐意帮忙!
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