从带破折号的字符串中解析 Pandas 列至今
Parse Pandas Column to date from string with dashes
正在尝试将 pandas 列 df['day']
解析为日期时间类型。值当前写为字符串,例如: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/ 的格式约定吗,我是不是漏掉了什么?
您需要删除参数 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]
正在尝试将 pandas 列 df['day']
解析为日期时间类型。值当前写为字符串,例如: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/ 的格式约定吗,我是不是漏掉了什么?
您需要删除参数 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]