網站首頁 編程語言 正文
異常描述
有時我們的Excel有一個調整過自定義格式的日期字段:
當我們用pandas讀取時卻是這樣的效果:
不管如何指定參數(shù)都無效。
出現(xiàn)原因
沒有使用系統(tǒng)內置的日期單元格格式,自定義格式沒有對負數(shù)格式進行定義,pandas讀取時無法識別出是日期格式,而是讀取出單元格實際存儲的數(shù)值。
解決方案:修改自定義格式
可以修改為系統(tǒng)內置的自定義格式:
或者在自定義格式上補充負數(shù)的定義:
增加;@即可
pandas直接解析Excel數(shù)值為日期
有時這種Excel很多,我們需要通過pandas批量讀取,挨個人工修改Excel的自定義格式費時費力,下面我演示如何使用pandas直接解析這些數(shù)值成為日期格式。
excel中常規(guī)格式和日期格式的轉換規(guī)則如下:
1900/1/1為起始日期,轉換的數(shù)字是1,往后的每一天增加1
1900/1/2轉換為數(shù)字是 2
1900/1/3轉換為數(shù)字是 3
1900/1/4轉換為數(shù)字是 4
以此類推
excel中時間轉換規(guī)則如下:
在時間中的規(guī)則是把1天轉換為數(shù)字是 1
每1小時就是 1/24
每1分鐘就是 1/(24×60)=1/1440
每1秒鐘就是 1/(24×60×60)=1/86400
根據(jù)Excel的日期存儲規(guī)則,我們只需要以1900/1/1為基準日期,根據(jù)數(shù)值n偏移n-1天即可得到實際日期。不過還有個問題,Excel多存儲了1900年2月29日這一天,而正常的日歷是沒有這一天的,而我們的日期又都是大于1900年的,所以應該偏移n-2天,干脆使用1899年12月30日作為基準,這樣不需要作減法操作。
解析代碼如下:
import pandas as pd from pandas.tseries.offsets import Day df = pd.read_excel("日期.xlsx") basetime = pd.to_datetime("1899/12/30") df.日期 = df.日期.apply(lambda x: basetime+Day(x)) df.日期 = df.日期.apply(lambda x: f"{x.month}月{x.day}日") df.head()
? | 日期 |
---|---|
0 | 6月8日 |
1 | 6月9日 |
2 | 6月10日 |
3 | 6月11日 |
4 | 6月12日 |
如果需要調用time的strftime方法,由于包含中文則需要設置locale:
import pandas as pd from pandas.tseries.offsets import Day import locale locale.setlocale(locale.LC_CTYPE, 'chinese') df = pd.read_excel("日期.xlsx") basetime = pd.to_datetime("1899/12/30") df.日期 = df.日期.apply(lambda x: basetime+Day(x)) df.日期 = df.日期.dt.strftime('%Y年%m月%d日') df.head()
? | 日期 |
---|---|
0 | 2021年06月08日 |
1 | 2021年06月09日 |
2 | 2021年06月10日 |
3 | 2021年06月11日 |
4 | 2021年06月12日 |
總結?
原文鏈接:https://blog.csdn.net/as604049322/article/details/117919953
相關推薦
- 2022-04-10 微信小程序音樂播放器
- 2022-04-10 詳解Unity日志打印工具功能_C#教程
- 2022-10-11 關于401狀態(tài)碼的含義和處理方式_相關技巧
- 2022-11-19 Python+random模塊實現(xiàn)隨機抽樣_python
- 2022-10-16 Python?讀取?Word?文檔操作_python
- 2022-04-08 CentOS7上安裝Docker的詳細步驟_docker
- 2022-10-05 python?slack桌面自動化開發(fā)工具_python
- 2023-01-07 python導入其他目錄下模塊的四種情況_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支