datetime.strptime从dataframe中提取:错误

时间:2014-11-17 15:20:27

标签: python datetime python-3.x pandas

Strptime没有做我(开始Python数据科学家)想要它做的事情。我有一个格式如下的数据文件:

STN,YYYYMMDD,HH,RH
210,20121001,1,0
210,20121001,2,0
210,20121001,3,0
210,20121001,4,0
...

在第二列中,日期,在观察的第三小时(1-24)。我想以日期时间格式获取日期和时间以将其与其他数据合并。我的尝试:

import pandas as pd
from datetime import datetime

meteo = pd.read_csv("x:\\hourly.txt", parse_dates=[[1,2]])
# dataframe created with a column 'YYYYMMDD_HH'
meteo['datetime']=meteo['YYYYMMDD_HH'].apply(lambda x: datetime.strptime(x,'%Y%m%d %H'))

Python在最后一行崩溃了(对我来说)非常神秘的错误:

Traceback (most recent call last):
  File "X:\test.py", line 11, in <module>
    meteo['datetime']=meteo['YYYYMMDD_HH'].apply(lambda x: datetime.strptime(x,'%Y%m%d %H'))
  File "C:\Program Files\Anaconda3\lib\site-packages\pandas\core\series.py", line 1998, in apply
    mapped = lib.map_infer(values, f, convert=convert_dtype)
  File "inference.pyx", line 1016, in pandas.lib.map_infer (pandas\lib.c:53184)
  File "X:\test.py", line 11, in <lambda>
    meteo['datetime']=meteo['YYYYMMDD_HH'].apply(lambda x: datetime.strptime(x,'%Y%m%d %H'))
  File "C:\Program Files\Anaconda3\lib\_strptime.py", line 500, in _strptime_datetime
    tt, fraction = _strptime(data_string, format)
  File "C:\Program Files\Anaconda3\lib\_strptime.py", line 340, in _strptime
    data_string[found.end():])
ValueError: unconverted data remains: 4

我做错了什么? 在此先感谢您的帮助, 尼尔斯

2 个答案:

答案 0 :(得分:0)

读取CSV文件时解析列。

import pandas as pd
from datetime import datetime

parse = lambda x: datetime.strptime(x, '%Y%m%d %H')
df = pd.read_csv("time.csv", parse_dates = [['YYYYMMDD', 'HH']], date_parser=parse)

print df

输出:

          YYYYMMDD_HH  STN  RH
0 2012-10-01 01:00:00  210   0
1 2012-10-01 02:00:00  210   0
2 2012-10-01 03:00:00  210   0
3 2012-10-01 04:00:00  210   0

答案 1 :(得分:0)

经过大量调试后,我自己解决了这个问题....数据文件包含1..24的小时数。当小时 24 时,解析会引发错误。它接受0..23的小时。我想我必须先重新格式化数据文件!

感谢您的回复。