2014-10-28 36 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