我有以下日期(以对象格式):大熊猫系列中的Tue 31 Jan
。
,我尝试将其更改为:31/01/2019
请,我该如何实现?我或多或少地了解到 pandas.Datetime 可以在字符串日期更清晰(例如6/1/1930 22:00
)时轻松转换,但在我的情况下,如果它们是工作日名称,则不容易转换。
感谢您的帮助。
答案 0 :(得分:3)
结合年份并使用自定义格式致电pd.to_datetime
:
s = pd.Series(['Tue 31 Jan', 'Mon 20 Feb',])
pd.to_datetime(s + ' 2019', format='%a %d %b %Y')
0 2019-01-31
1 2019-02-20
dtype: datetime64[ns]
这很好,只要您的所有日期都遵循这种格式即可。 如果不是这种情况,则无法可靠地解决。
有关日期时间格式的更多信息,请访问strftime.org。
另一个选择是使用第三方dateutil
库:
import dateutil
s.apply(dateutil.parser.parse)
0 2018-01-31
1 2018-02-20
dtype: datetime64[ns]
可以与PyPi一起安装。
另一种较慢的选择(但更灵活)是使用第三方datefinder
库从包含随机文本的字符串中嗅探日期(如果需要的话):
import datefinder
s.apply(lambda x: next(datefinder.find_dates(x)))
0 2018-01-31
1 2018-02-20
dtype: datetime64[ns]
您可以使用PyPi安装它。
答案 1 :(得分:0)
以下是获得相同结果的两种替代方法。
方法1:使用日期时间模块
from datetime import datetime
datetime_object = datetime.strptime('Tue 31 Jan', '%a %d %b')
print(datetime_object) # outputs 1900-01-31 00:00:00
如果您提供了诸如Tue 31 Jan 2018
之类的Year参数,那么此代码将起作用。
from datetime import datetime
datetime_object = datetime.strptime('Tue 31 Jan 2018', '%a %d %b %Y')
print(datetime_object) # outputs 2018-01-31 00:00:00
以31/01/2019
这样的格式打印结果日期。您可以使用
print(datetime_object.strftime("%d/%m/%Y")) # outputs 31/01/2018
Here是datetime对象可用的所有可能的格式设置选项。
方法2:使用dateutil.parser
此方法自动用当前年份填充Year参数。
from dateutil import parser
string = "Tue 31 Jan"
date = parser.parse(string)
print(date) # outputs 2018-01-31 00:00:00
答案 2 :(得分:0)
datetime
对象如果您想使用datetime
模块,则可以通过执行以下操作获得年份:
import datetime as dt
d = dt.datetime.strptime('Tue 31 Jan', '%a %d %b').replace(year=dt.datetime.now().year)
这将采用您的格式的日期,但以可靠的方式将默认年份1900
替换为当前年份。
这与其他答案类似,但是使用内置的replace
方法,而不是连接字符串。
要从新的datetime
对象中获得所需的输出,可以执行以下操作:
>>> d.strftime('%d/%m/%Y')
'31/01/2018'