首页 文章详情

请问Pandas怎么能把类似201001这种月度格式改为2021-01-31这种日期格式

Python爬虫与数据挖掘 | 146 2022-07-05 17:11 0 0 0
UniSMS (合一短信)
点击上方“Python爬虫与数据挖掘”,进行关注

回复“书籍”即可获赠Python从入门到进阶共10本电子书

落叶人何在,寒云路几层。

大家好,我是Python进阶者。

一、前言

前几天在Python最强王者交流群【老松鼠】问了一道Pandas时间处理的问题,如下图所示。

二、实现过程

一开始以为只是每个数据先加个31后缀,之后日期格式化转换一下应该就可以了,后来发现每个月天数不一样,不可以一概而论,后来才知道,原来有现成的函数。

这里【瑜亮老师】给了两个方法,一起来学习下吧!

方法一

代码如下:

import pandas as pd
from pandas.tseries.offsets import MonthEnd

df = pd.DataFrame({'date': ['2022-01''2022-02''2022-03''2022-04''2022-05''2022-06''2022-07']})
df['new_date'] = df['date'].astype('datetime64').map(MonthEnd())
print(df)

运行结果如下图所示:

方法二

至于像202201这样格式的时间字符串,【瑜亮老师】做了一下转换,然后继续使用类似上面的方法,实现需求。

import pandas as pd
from pandas.tseries.offsets import MonthEnd

df = pd.DataFrame({'date': ['202201''202202''202203''202204''202205''202206''202207']})

df['new_date'] = pd.to_datetime(df['date'], format='%Y%m').map(MonthEnd())
print(df)

运行之后,结果如下图所示:

不过后来【月神】在测试的时候发现,当日期是本月的最后一天,转变后会变成下月的最后一天,有点偏移误差。

后来【瑜亮老师】还给了一个思路,无需额外导包,不添加任何依赖,如下所示。

后来【老松鼠】自己给了一份代码,他自己觉得方法有点儿笨,但是结果和效率也还算可以,如下图所示。

后来【月神】针对批量数据,又多方面进行了尝试,如下所示:

后来发现用加号就快了很多。针对效率方面,【月神】也给出了自己的看法,真的学习了!

这个加号,【月神】也举了一个例子,来帮助大家理解。

三、总结

大家好,我是Python进阶者。这篇文章主要盘点了一道Pandas时间处理的问题,文中针对该问题给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。

最后感谢粉丝【老松鼠】提问,感谢【瑜亮老师】、【月神】、【dcpeng】、【老松鼠】给出的思路和代码解析,感谢【冯诚】、【艾希·觉罗】、【Chloe】、【mofyl】等人参与学习交流。

小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。

------------------- End -------------------

往期精彩文章推荐:

欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持

想加入Python学习群请在后台回复【入群

万水千山总是情,点个【在看】行不行

/今日留言主题/

随便说一两句吧~~

good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter