alm*_*lmo 2 python date pandas
我一直坚持以下格式:
0 2001-12-25
1 2002-9-27
2 2001-2-24
3 2001-5-3
4 200510
5 20078
Run Code Online (Sandbox Code Playgroud)
我需要的是格式为 %Y-%m 的日期
我尝试的是
def parse(date):
if len(date)<=5:
return "{}-{}".format(date[:4], date[4:5], date[5:])
else:
pass
df['Date']= parse(df['Date'])
Run Code Online (Sandbox Code Playgroud)
但是,我只成功解析了20078到2007-8,像2001-12-25这样的格式显示为None。那么,我该怎么做呢?谢谢你!
我们可以使用pd.to_datetime和 useerrors='coerce'来逐步解析日期。
假设您的专栏被称为date
s = pd.to_datetime(df['date'],errors='coerce',format='%Y-%m-%d')
s = s.fillna(pd.to_datetime(df['date'],format='%Y%m',errors='coerce'))
df['date_fixed'] = s
print(df)
date date_fixed
0 2001-12-25 2001-12-25
1 2002-9-27 2002-09-27
2 2001-2-24 2001-02-24
3 2001-5-3 2001-05-03
4 200510 2005-10-01
5 20078 2007-08-01
Run Code Online (Sandbox Code Playgroud)
按步骤,
首先,我们将常规日期时间转换为一个名为的新系列s
s = pd.to_datetime(df['date'],errors='coerce',format='%Y-%m-%d')
print(s)
0 2001-12-25
1 2002-09-27
2 2001-02-24
3 2001-05-03
4 NaT
5 NaT
Name: date, dtype: datetime64[ns]
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,NaT我们的系列中有两个为空日期时间值,它们与您缺少一天的日期时间相对应,
然后我们重新应用相同的datetime方法但使用相反的格式,并将它们应用于缺失值s
s = s.fillna(pd.to_datetime(df['date'],format='%Y%m',errors='coerce'))
print(s)
0 2001-12-25
1 2002-09-27
2 2001-02-24
3 2001-05-03
4 2005-10-01
5 2007-08-01
Run Code Online (Sandbox Code Playgroud)
然后我们重新分配给您的数据框。
| 归档时间: |
|
| 查看次数: |
1185 次 |
| 最近记录: |