Pandas中字符串和時(shí)間轉(zhuǎn)換與格式化的實(shí)現(xiàn)
Pandas 提供了若干個(gè)函數(shù)來(lái)格式化時(shí)間。
把字符串轉(zhuǎn)為時(shí)間格式
其中,最常用的是 to_datetime() 函數(shù)。
可以使用 to_datetime() 函數(shù)將一個(gè)字符串解析為時(shí)間,并指定字符串的格式。例如:
import pandas as pd # 將字符串 "2022-01-01" 轉(zhuǎn)為時(shí)間格式 time = pd.to_datetime("2022-01-01", format="%Y-%m-%d") print(time)
輸出:
<class 'pandas._libs.tslibs.timestamps.Timestamp'>:2022-01-01 00:00:00
把時(shí)間格式化為字符串
還可以使用 strftime() 函數(shù)將時(shí)間格式化為字符串。例如:
import pandas as pd # 將時(shí)間 "2022-01-01 00:00:00" 格式化為字符串 time_str = pd.to_datetime("2022-01-01 00:00:00").strftime("%Y-%m-%d") print(time_str)
輸出:
<class 'str'>:2022-01-01
格式化某一列的時(shí)間為字符串
如果想要格式化某一列中的時(shí)間,可以使用 pandas 的 to_datetime 函數(shù)。
例如,假設(shè)你有一個(gè)名為 df 的數(shù)據(jù),并且你想要格式化其中一列名為 “Date” 的時(shí)間列,你可以這樣做:
df['Date'] = pd.to_datetime(df['Date'])
這將會(huì)將 “Date” 列中的所有時(shí)間轉(zhuǎn)換為 Pandas 的時(shí)間數(shù)據(jù)類(lèi)型。你也可以指定一個(gè)特定的時(shí)間格式,例如:
df['Date'] = pd.to_datetime(df['Date'], format='%Y-%m-%d %H:%M:%S')
這將會(huì)將 “Date” 列中的所有時(shí)間按照指定的格式轉(zhuǎn)換為 Pandas 的時(shí)間數(shù)據(jù)類(lèi)型。
遇到的錯(cuò)誤
但是,我在修改以下數(shù)據(jù)的格式時(shí),想要把listed_date和delisted_date格式化為字符串,出現(xiàn)了錯(cuò)誤。
sec_id sec_name listed_date delisted_date
2716 hc2301 熱軋卷板2301 2022-01-18 00:00:00+08:00 2023-01-16 00:00:00+08:00
2717 hc2302 熱軋卷板2302 2022-02-16 00:00:00+08:00 2023-02-15 00:00:00+08:00
2718 hc2303 熱軋卷板2303 2022-03-16 00:00:00+08:00 2023-03-15 00:00:00+08:00
2719 hc2304 熱軋卷板2304 2022-04-18 00:00:00+08:00 2023-04-17 00:00:00+08:00
2720 hc2305 熱軋卷板2305 2022-05-17 00:00:00+08:00 2023-05-15 00:00:00+08:00
2721 hc2306 熱軋卷板2306 2022-06-16 00:00:00+08:00 2023-06-15 00:00:00+08:00
2722 hc2307 熱軋卷板2307 2022-07-18 00:00:00+08:00 2023-07-17 00:00:00+08:00
2723 hc2308 熱軋卷板2308 2022-08-16 00:00:00+08:00 2023-08-15 00:00:00+08:00
2724 hc2309 熱軋卷板2309 2022-09-16 00:00:00+08:00 2023-09-15 00:00:00+08:00
2725 hc2310 熱軋卷板2310 2022-10-18 00:00:00+08:00 2023-10-16 00:00:00+08:00
2726 hc2311 熱軋卷板2311 2022-11-16 00:00:00+08:00 2023-11-15 00:00:00+08:00
2727 hc2312 熱軋卷板2312 2022-12-16 00:00:00+08:00 2023-12-15 00:00:00+08:00
格式化代碼如下:
data_choose['listed_date'] = data_choose['listed_date'].dt.strftime('%Y-%m-%d %H:%M:%S') data_choose['delisted_date'] = data_choose['delisted_date'].dt.strftime('%Y-%m-%d %H:%M:%S')
報(bào)錯(cuò):
SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrameSee the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
推測(cè)錯(cuò)誤原因:
不能直接修改原來(lái)的dataframe上的列,然后再替換原來(lái)的列數(shù)據(jù)。
于是,復(fù)制了一個(gè)數(shù)據(jù)副本:
data_new = data_choose.copy() data_new['listed_date'] = data_choose['listed_date'].dt.strftime('%Y-%m-%d %H:%M:%S') data_new['delisted_date'] = data_choose['delisted_date'].dt.strftime('%Y-%m-%d %H:%M:%S')
在復(fù)制的數(shù)據(jù)上進(jìn)行修改,果然沒(méi)再報(bào)錯(cuò)。
輸出:
sec_id sec_name listed_date delisted_date
2716 hc2301 熱軋卷板2301 2022-01-18 00:00:00 2023-01-16 00:00:00
2717 hc2302 熱軋卷板2302 2022-02-16 00:00:00 2023-02-15 00:00:00
2718 hc2303 熱軋卷板2303 2022-03-16 00:00:00 2023-03-15 00:00:00
2719 hc2304 熱軋卷板2304 2022-04-18 00:00:00 2023-04-17 00:00:00
2720 hc2305 熱軋卷板2305 2022-05-17 00:00:00 2023-05-15 00:00:00
2721 hc2306 熱軋卷板2306 2022-06-16 00:00:00 2023-06-15 00:00:00
2722 hc2307 熱軋卷板2307 2022-07-18 00:00:00 2023-07-17 00:00:00
2723 hc2308 熱軋卷板2308 2022-08-16 00:00:00 2023-08-15 00:00:00
2724 hc2309 熱軋卷板2309 2022-09-16 00:00:00 2023-09-15 00:00:00
2725 hc2310 熱軋卷板2310 2022-10-18 00:00:00 2023-10-16 00:00:00
2726 hc2311 熱軋卷板2311 2022-11-16 00:00:00 2023-11-15 00:00:00
2727 hc2312 熱軋卷板2312 2022-12-16 00:00:00 2023-12-15 00:00:00
使用apply()和lambda函數(shù)
另一種格式化方式,并不會(huì)出錯(cuò):
# 把日期改為字符串 data_choose.listed_date = data_choose.listed_date.apply(lambda x: x.strftime("%Y-%m-%d %H:%M:%S")) # 把時(shí)間列轉(zhuǎn)為字符串 data_choose.delisted_date = data_choose.delisted_date.apply(lambda x: x.strftime("%Y-%m-%d %H:%M:%S"))
這里對(duì)列使用了apply()和lambda函數(shù),相當(dāng)于遍歷列的數(shù)據(jù)進(jìn)行修改替換。
把某一列轉(zhuǎn)為時(shí)間格式
直接使用pd.to_datetime()就可以了。
這里不會(huì)出現(xiàn)錯(cuò)誤。
# 把列轉(zhuǎn)為時(shí)間格式 data_new.listed_date = pd.to_datetime(data_new.listed_date) data_new.delisted_date = pd.to_datetime(data_new.delisted_date)
到此這篇關(guān)于Pandas中字符串和時(shí)間轉(zhuǎn)換與格式化的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Pandas 字符串和時(shí)間轉(zhuǎn)換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 通過(guò)5個(gè)例子讓你學(xué)會(huì)Pandas中的字符串過(guò)濾
- python語(yǔ)言中pandas字符串分割str.split()函數(shù)
- pandas?如何將字符串映射為數(shù)字
- pandas如何將datetime64[ns]轉(zhuǎn)為字符串日期
- python?pandas分割DataFrame中的字符串及元組的方法實(shí)現(xiàn)
- pandas factorize實(shí)現(xiàn)將字符串特征轉(zhuǎn)化為數(shù)字特征
- 從pandas一個(gè)單元格的字符串中提取字符串方式
- Pandas過(guò)濾dataframe中包含特定字符串的數(shù)據(jù)方法
- 使用pandas批量處理矢量化字符串的實(shí)例講解
相關(guān)文章
使用mypy對(duì)python程序進(jìn)行靜態(tài)檢查
大家好,本篇文章主要講的是使用mypy對(duì)python程序進(jìn)行靜態(tài)檢查,感興趣的同學(xué)快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下哦2021-11-115 分鐘讀懂Python 中的 Hook 鉤子函數(shù)
這篇文章主要介紹了5 分鐘掌握 Python 中的 Hook 鉤子函數(shù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12python利用pytesseract 實(shí)現(xiàn)本地識(shí)別圖片文字
這篇文章主要介紹了python利用pytesseract 實(shí)現(xiàn)本地識(shí)別圖片文字,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-12-12解決python中os.system調(diào)用exe文件的問(wèn)題
這篇文章主要介紹了解決python中os.system調(diào)用exe文件的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05Python實(shí)現(xiàn)基于多線程、多用戶(hù)的FTP服務(wù)器與客戶(hù)端功能完整實(shí)例
這篇文章主要介紹了Python實(shí)現(xiàn)基于多線程、多用戶(hù)的FTP服務(wù)器與客戶(hù)端功能,結(jié)合完整實(shí)例形式分析了Python多線程、多用戶(hù)FTP服務(wù)器端與客戶(hù)端相關(guān)實(shí)現(xiàn)技巧與注意事項(xiàng),需要的朋友可以參考下2017-08-08