2014-10-28 4 views
1

Я пытаюсь прочитать файл csv и преобразовать его в dataframe, который будет использоваться в качестве временного ряда. Файл CSV имеет этот тип:Невозможно преобразовать в datetime с помощью pd.to_datetime

  #Date  Time CO_T1_AHU.01_CC_CTRV_CHW__SIG_STAT 
0   NaN  NaN          % 
1   NaN  NaN Cooling Coil Hydronic Valve Position 
2 2014-01-01 00:00:00          0 
3 2014-01-01 01:00:00          0 
4 2014-01-01 02:00:00          0 
5 2014-01-01 03:00:00          0 
6 2014-01-01 04:00:00          0 

Я прочитал файл, используя:

df = pd.read_csv ('filepath/file.csv', sep=';', parse_dates = [[0,1]]) 

производит этот результат:

   #Date_Time FCO_T1_AHU.01_CC_CTRV_CHW__SIG_STAT 
0    nan nan          % 
1    nan nan Cooling Coil Hydronic Valve Position 
2 2014-01-01 00:00:00          0 
3 2014-01-01 01:00:00          0 
4 2014-01-01 02:00:00          0 
5 2014-01-01 03:00:00          0 
6 2014-01-01 04:00:00          0 

продолжить преобразование строки в дату и использовать его в качестве индекс:

pd.to_datetime(df.values[:,0]) 
df.set_index([df.columns[0]], inplace=True) 

так я получаю это:

     FCO_T1_AHU.01_CC_CTRV_CHW__SIG_STAT 
#Date_Time             
nan nan             % 
nan nan    Cooling Coil Hydronic Valve Position 
2014-01-01 00:00:00          0 
2014-01-01 01:00:00          0 
2014-01-01 02:00:00          0 
2014-01-01 03:00:00          0 
2014-01-01 04:00:00          0 

Однако pd.to_datetime не в состоянии преобразовать DateTime. Есть ли способ узнать, что такое ошибка?

Большое спасибо. Луис

+0

Что такое сообщение об ошибке? –

+0

Лиам, это было «невозможно разобрать naan» – user2564259

ответ

1

Запись строки «нан нан» не могут быть преобразованы с помощью to_datetime, поэтому заменить их пустой строкой, так что теперь они могут быть преобразованы в NaT:

In [122]: 

df['Date_Time'].replace('nan nan', '',inplace=True) 
df 
Out[122]: 
      Date_Time index  CO_T1_AHU.01_CC_CTRV_CHW__SIG_STAT 
0       0          % 
1       1 Cooling Coil Hydronic Valve Position 
2 2014-01-01 00:00:00  2          0 
3 2014-01-01 01:00:00  3          0 
4 2014-01-01 02:00:00  4          0 
5 2014-01-01 03:00:00  5          0 
6 2014-01-01 04:00:00  6          0 
In [124]: 

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

Out[124]: 
      Date_Time index  CO_T1_AHU.01_CC_CTRV_CHW__SIG_STAT 
0     NaT  0          % 
1     NaT  1 Cooling Coil Hydronic Valve Position 
2 2014-01-01 00:00:00  2          0 
3 2014-01-01 01:00:00  3          0 
4 2014-01-01 02:00:00  4          0 
5 2014-01-01 03:00:00  5          0 
6 2014-01-01 04:00:00  6          0 

UPDATE

На самом деле, если вы только что установили coerce=True, тогда он преобразует штраф:

df['Date_Time'] = pd.to_datetime(df['Date_Time'], coerce=True) 
+0

Спасибо EdChum. Интересно, используется ли с помощью параметра coerce = True то же самое. (Я думаю, что может быть более одного «нана» или других неотразимых строк) – user2564259

+0

@ user2564259 на самом деле да 'coerce = True' работает, но не уверен, что еще он обрабатывает. Я добавлю обновление – EdChum

+0

Спасибо Ed, теперь df type is и тип df.index user2564259

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