从带有破折号的字符串中解析Pandas Column

时间:2016-09-27 14:37:26

标签: date datetime pandas casting date-format

尝试将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/的格式约定,我错过了什么吗?

1 个答案:

答案 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]