2014-03-18 131 views
2

数据 - 这是我的数据在熊猫数据帧ValueError异常:未转换的数据保留在熊猫据帧

CallDateAndTimeStart 
01/01/2010 00:26:28.003613 MST 
01/01/2010 00:28:54.230713 MST 
01/02/2008 14:12:11 MST 
05/19/2010 09:12:32.080728 MST 

我试图列D型改为datetime64 [NS]

df['CallDateAndTimeStart'] = pandas.to_datetime(df['CallDateAndTimeStart'], 
    format='%m/%d/%Y %H:%M:%S') 

错误消息 - 未清理数据时,出现以下错误:

File "C:\Python27\lib\site-packages\pandas\tseries\tools.py", line 308, in _convert_listlike raise e 
ValueError: unconverted data remains: .003613 MST 

问题

我怎么会纠正我的数据框列,以便它可以转换为datetime类型?我发布了我的答案,但有更好的答案吗?谢谢。

回答

1

代码

我应用自定义功能上数据帧柱(convert_time)

df['CallDateAndTimeStart'] = df['CallDateAndTimeStart'].apply(convert_time) 

def convert_time(mytime): 
""" Fix DateTime by removing details after . and timezones """ 

    # Remove on period and after 
    try: 
     mytime = str(mytime).split(".")[0] 
    except ValueError: 
     print "Not able to split ." 

    # Remove Timeframe (E.g. MST) 
    mytime = str(mytime).split(" ")[0] + " " + str(mytime).split(" ")[1] 

return mytime 

df['CallDateAndTimeStart'] = pandas.to_datetime(df['CallDateAndTimeStart'], 
    format='%m/%d/%Y %H:%M:%S') 

输出

CallDateAndTimeStart 
2010-01-01 00:26:28 
2010-01-01 00:28:54 
2010-05-19 09:12:32 
2008-01-02 14:12:11 
2010-01-01 00:39:41 
0

我encounterd同样的问题,我使用的相同像你这样解决它(应用一个函数来删除不必要的数据)

我想你可以使用标准的接口,以避免此问题:

>>> now = time.time() # get current time in second 
>>> now_format = time.ctime(now) # get formatted time, like 'Thu May 21 17:43:46 2015' 

,然后使用time.strptime()来得到一个标准的时间结构:

>>> standard_time_struct = time.strptime(now_format,"%a %B %d %X %Y") 

你可以得到最终结果如下:

>>> standard_time_struct 
>>> time.struct_time(tm_year=2015, tm_mon=5, tm_mday=21, tm_hour=17, tm_min=49, tm_sec=10, tm_wday=3, tm_yday=141, tm_isdst=-1)