我的(pandas)数据框中有一列:
data['Start Date'].head() type(data['Start Date']) Output: 1/7/13 1/7/13 1/7/13 16/7/13 16/7/13
当我将其转换为日期格式(如下所示)时,我收到错误ValueError:未知的字符串格式
data['Start Date']= pd.to_datetime(data['Start Date'],dayfirst=True) ... ... /Library/Python/2.7/site-packages/pandas/tseries/tools.pyc in _convert_listlike(arg, box, format, name) 381 return DatetimeIndex._simple_new(values, name=name, tz=tz) 382 except (ValueError, TypeError): --> 383 raise e 384 385 if arg is None: ValueError: Unknown string format
我在这里错过了什么?
我认为问题出在数据中 - 存在一个有问题的字符串.所以你可以尝试在列中检查字符串的长度Start Date
:
import pandas as pd import io temp=u"""Start Date 1/7/13 1/7/1 1/7/13 12 17 16/7/13 16/7/13""" data = pd.read_csv(io.StringIO(temp), sep=";", parse_dates=False) #data['Start Date']= pd.to_datetime(data['Start Date'],dayfirst=True) print data Start Date 0 1/7/13 1 1/7/1 2 1/7/13 12 17 3 16/7/13 4 16/7/13 #check, if length is more as 7 print data[data['Start Date'].str.len() > 7] Start Date 2 1/7/13 12 17
或者您可以尝试以不同的方式查找这些有问题的行,例如只读取部分日期时间并检查解析日期时间:
#read first 3 rows data= data.iloc[:3] data['Start Date']= pd.to_datetime(data['Start Date'],dayfirst=True)
但这只是提示.
编辑:
由于里斯的建议添加参数errors ='coerce'
到to_datetime
:
temp=u"""Start Date 1/7/13 1/7/1 1/7/13 12 17 16/7/13 16/7/13 12 04""" data = pd.read_csv(io.StringIO(temp), sep=";") #add parameter errors coerce data['Start Date']= pd.to_datetime(data['Start Date'], dayfirst=True, errors='coerce') print data Start Date 0 2013-07-01 1 2001-07-01 2 NaT 3 2013-07-16 4 NaT #index of data with null - NaT to variable idx idx = data[data['Start Date'].isnull()].index print idx Int64Index([2, 4], dtype='int64') #read csv again data = pd.read_csv(io.StringIO(temp), sep=";") #find problematic rows, where datetime is not parsed print data.iloc[idx] Start Date 2 1/7/13 12 17 4 16/7/13 12 04