尝试将pandas列df['day']
解析为datetime类型。值最初写为字符串,例如:2016-9-1
。这相当于年 - 月 - 日。
我正在关注此页面的格式: http://strftime.org/
我最初尝试使用
pd.to_datetime(df['day'], format="%Y-%m-%d")
但得到了错误
ValueError: time data 'day' does match format specified
我认为问题是日期和月份不是零,填充,所以改为:
pd.to_datetime(df['day'], format="%Y-%-m-%-d")
我正在使用%-m
和%-d
,因为两者都对应于非零填充(十进制)数字。
获得不同的错误:
ValueError: '-' is a bad directive in format '%Y-%-m-%-d'
我不应该遵循http://strftime.org/的格式约定,我错过了什么吗?
答案 0 :(得分:3)
您需要删除参数-
中的format
:
df = pd.DataFrame({'day':['2016-9-1']})
print (df)
day
0 2016-9-1
print (pd.to_datetime(df['day'], format="%Y-%m-%d"))
0 2016-09-01
Name: day, dtype: datetime64[ns]
编辑:
所以它看起来像是一些不好的数据,所以你可以使用:
df = pd.DataFrame({'day':['2016-9-1', '2016-12-0']})
print (df)
day
0 2016-9-1
1 2016-12-0
#check problematic values
print (df[pd.to_datetime(df['day'], format="%Y-%m-%d", errors='coerce').isnull()])
day
1 2016-12-0
#convert problematic values to NaT
print (pd.to_datetime(df['day'], format="%Y-%m-%d", errors='coerce'))
0 2016-09-01
1 NaT
Name: day, dtype: datetime64[ns]