2014-10-28 52 views
1

我正在嘗試讀取csv文件並將其轉換爲數據幀以用作時間序列。 CSV文件是這種類型的:無法使用pd.to_datetime轉換爲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 

繼續將字符串轉換爲日期時間,並用它作爲index:

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

什麼是錯誤信息? – 2014-10-28 16:14:11

+0

利亞姆,它「無法解析na」 – user2564259 2014-10-28 16:23:37

回答

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

謝謝埃德金。我想知道使用參數coerce = True是否有效。 (我認爲可能有多個「nan」或其他不可解析的字符串) – user2564259 2014-10-28 16:22:54

+0

@ user2564259實際上是'coerce = True',不知道它還處理了什麼。我將添加更新 – EdChum 2014-10-28 16:24:10

+0

感謝埃德,現在df類型是和df.index類型是 user2564259 2014-10-28 16:37:00