2014-11-17 2 views
0

Strptime не делает то, что я (начиная с Python data-scientist) хочет этого сделать. У меня есть файл данных в формате следующим образом:datetime.strptime извлечение из dataframe: ошибка

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

Во второй колонке даты, в третий час (1-24) о наблюдении. Я хотел бы получить дату и время в формате datetime, чтобы объединить его с другими данными. Моя попытка:

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 

Что я делаю неправильно? Спасибо за вашу помощь, Niels

+0

Я бы попытался напечатать это значение и посмотреть, как он выглядит ... похоже, что у вас есть дополнительные буквы в шаблоне strptime или в вашей ценности ... вы можете, вероятно, принудительно ограничить размер x, чтобы решить проблему но я не уверен –

ответ

0

После обширной отладки я решил проблему сам .... файл данных содержит часы от 1..24. Анализ приводит к ошибке, когда час . Он принимает часы от 0..23. Наверное, мне нужно сначала форматировать файл данных!

Спасибо за ваши ответы.

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 
Смежные вопросы