2016-04-18 2 views
1

У меня есть куча данных о погоде, которые мне нужно переназначить с помощью Pandas. Я изо всех сил пытаюсь преобразовать первый столбец «Время» в индекс datetime. Я просматривал форумы и не смог решить проблему.Преобразование столбца данных в datetime для повторного сопоставления

Вот пример данных:

Time TemperatureF DewpointF 

1/1/2015 0:01 31.7 27.1 

1/1/2015 0:06 31.7 27.4 

1/1/2015 0:11 31.6 27.3 

1/1/2015 0:16 31.6 27.3 

1/1/2015 0:21 31.5 26.9 

1/1/2015 0:26 31.5 26.9 

1/1/2015 0:31 31.5 26.9 

и здесь самая последняя версия кода я использую для переиндексации.

Любая помощь была бы принята с благодарностью!

df = df.set_index('Time') 
df.index = df.index.to_datetime() 
+0

Что проблема у вас есть? Ошибки и т. Д. – Alexander

+0

Можете ли вы показать результаты 1) 'df.head (2)', 2) 'df.Time.iat [0]' и 3) 'type (df.Time.iat [0]) 'Спасибо. – Alexander

+0

1) <связанный метод NDFrame.head of 2) AttributeError: объект DataFrame не имеет атрибута «Время» 3). Спасибо за интерес или помощь! – WheninSeattle

ответ

1

Я думаю, вы можете попробовать to_datetime и set_index:

print df 
      Time TemperatureF DewpointF 
0 1/1/2015 0:01   31.7  27.1 
1 1/1/2015 0:06   31.7  27.4 
2 1/1/2015 0:11   31.6  27.3 
3 1/1/2015 0:16   31.6  27.3 
4 1/1/2015 0:21   31.5  26.9 
5 1/1/2015 0:26   31.5  26.9 
6 1/1/2015 0:31   31.5  26.9 

#check column names 
print df.columns 
Index([u'Time', u'TemperatureF', u'DewpointF'], dtype='object') 

#first number is month 
df['Time'] = pd.to_datetime(df['Time'], format='%m/%d/%Y %H:%M') #no double [] 

df.set_index('Time', inplace=True) 
print df 
        TemperatureF DewpointF 
Time           
2015-01-01 00:01:00   31.7  27.1 
2015-01-01 00:06:00   31.7  27.4 
2015-01-01 00:11:00   31.6  27.3 
2015-01-01 00:16:00   31.6  27.3 
2015-01-01 00:21:00   31.5  26.9 
2015-01-01 00:26:00   31.5  26.9 
2015-01-01 00:31:00   31.5  26.9 

print df.index 
DatetimeIndex(['2015-01-01 00:01:00', '2015-01-01 00:06:00', 
       '2015-01-01 00:11:00', '2015-01-01 00:16:00', 
       '2015-01-01 00:21:00', '2015-01-01 00:26:00', 
       '2015-01-01 00:31:00'], 
       dtype='datetime64[ns]', name=u'Time', freq=None) 

Если еще ValueError, попробуйте добавить параметр errors='coerce' для преобразования строк не соответствие формата NaT:

df['Time'] = pd.to_datetime(df['Time'], format='%d/%m/%Y %H:%M', errors='coerce') 
+0

Когда я добавляю предложенный код, я получаю сообщение об ошибке: ValueError: Неизвестный формат строки – WheninSeattle

+0

Пожалуйста, проверьте решение, я надеюсь, что это будет работа. – jezrael

+0

df ['Time'] = pd.to_datetime (df ['Time'], format = '% m /% d /% Y% H:% M', errors = 'coerce') the errors = 'coerce «Кажется, это был ключ! Спасибо, это сработало красиво! – WheninSeattle

1

Попробуйте использовать pd.to_datetime() вместо df.index.to_datetime() и использовать результат в качестве index.

Если формат не преобразуется правильно, вам необходимо добавить параметр format, который использует соглашения об именах these, например. format='%m/%d/%Y %H:%M'.

df['Time'] = pd.to_datetime(df[['Time']]) # Convert 'Time' column to datetime, possibly using format keyword 
df.set_index(df.Time, inplace=True) # set result as index 
+0

Я получаю TypeError: "arg должен быть строкой, datetime, list, tuple, 1-d array или Series" – WheninSeattle

+0

df [['Time']] должен предоставить вам 'pd.Series', ve уже установил его для индексации. Что вы получаете вместо этого? – Stefan

+0

KeyError: "['Time'] не в индексе" – WheninSeattle

1
df.set_index(pd.DatetimeIndex(pd.to_datetime(df.Time)), inplace=True) 
+0

Я все еще получаю «TypeError: Unrecognized value type: » & «ValueError: Неизвестный формат строки» – WheninSeattle

Смежные вопросы