请问Pandas怎么能把类似201001这种月度格式改为2021-01-31这种日期格式
回复“书籍”即可获赠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学习群请在后台回复【入群】
万水千山总是情,点个【在看】行不行
/今日留言主题/
随便说一两句吧~~