pandas 是 python 中一個功能強(qiáng)大的庫,這里就不再復(fù)述了,簡單介紹下用日期范圍篩選 pandas 數(shù)據(jù)。
用來篩選的列是 date 類型,所以這里要把要篩選的日期范圍從字符串轉(zhuǎn)成 date 類型
比如我的數(shù)據(jù)包含列名為 trade_date,從 20050101 - 20190926 的數(shù)據(jù),我要篩選出 20050606 - 20071016 的數(shù)據(jù),那么,先如下轉(zhuǎn)換數(shù)據(jù)類型:
s_date = datetime.datetime.strptime('20050606', '%Y%m%d').date() e_date = datetime.datetime.strptime('20071016', '%Y%m%d').date()
非常簡單,一行代碼就搞定了:
df = df[(df['tra_date'] >= s_date) (df['tra_date'] = e_date)]
注意事項
import pandas as pd #讀取文件 df = pd.read_csv('./TianQi.csv') #獲取九月份數(shù)據(jù)的幾種方法 #方法一 使用行索引切片,['2019/9/1':'2019/9/30'],缺點是要求日期必須是連續(xù)的。為了方便查看取前5條,以下其他方法均取前5條,由于未進(jìn)行排序,順序會有差異 df.set_index('日期',inplace=True) print(df['2019/9/1':'2019/9/30'].head()) #或者print(df.loc['2019/9/1':'2019/9/30',:]) ''' 打印: 最高溫度 最低溫度 天氣 風(fēng)向 風(fēng)級 空氣質(zhì)量 日期 2019/9/1 33℃ 19℃ 多云~晴 西南風(fēng) 2級 良 2019/9/2 34℃ 20℃ 晴 南風(fēng) 2級 良 2019/9/3 33℃ 20℃ 晴 東南風(fēng) 2級 良 2019/9/7 34℃ 21℃ 晴 西南風(fēng) 2級 良 2019/9/8 35℃ 22℃ 晴~多云 東北風(fēng) 2級 良 ''' #方法二 利用列表生成式和startwith('2019/9')生成bool列表,缺點,比較麻煩。 print(df.loc[[True if i.startswith('2019/9') else False for i in df.index.tolist()],:].head()) ''' 打?。? 最高溫度 最低溫度 天氣 風(fēng)向 風(fēng)級 空氣質(zhì)量 日期 2019/9/4 32℃ 19℃ 晴 東南風(fēng) 2級 良 2019/9/5 33℃ 20℃ 晴 東南風(fēng) 2級 良 2019/9/6 33℃ 20℃ 晴 東南風(fēng) 1級 良 2019/9/1 33℃ 19℃ 多云~晴 西南風(fēng) 2級 良 2019/9/2 34℃ 20℃ 晴 南風(fēng) 2級 良 ''' #方法三 利用pandas的str和startswith('2019/9')|contains('2019/9')。 df1 = pd.read_csv('./TianQi.csv') print(df1[df1['日期'].str.startswith('2019/9')].head()) ''' 打?。? 日期 最高溫度 最低溫度 天氣 風(fēng)向 風(fēng)級 空氣質(zhì)量 243 2019/9/4 32℃ 19℃ 晴 東南風(fēng) 2級 良 244 2019/9/5 33℃ 20℃ 晴 東南風(fēng) 2級 良 245 2019/9/6 33℃ 20℃ 晴 東南風(fēng) 1級 良 246 2019/9/1 33℃ 19℃ 多云~晴 西南風(fēng) 2級 良 247 2019/9/2 34℃ 20℃ 晴 南風(fēng) 2級 良 ''' #方法四 講日期轉(zhuǎn)換成datetime類型 df1['日期'] = pd.to_datetime(df1['日期']) df1.set_index('日期',inplace=True,drop=True) #print(df1['2019']) #取2019年數(shù)據(jù),或者df.loc['2019'] print(df1['2019/09'].head()) ''' 取201909月數(shù)據(jù),其他變形寫法df['2019-9'] df['2019-09'] df['2019/9'] df.loc['2019-9',:] df.loc['2019-09',:] df.loc['2019/09',:] df.loc['2019/9',:] 打?。? 最高溫度 最低溫度 天氣 風(fēng)向 風(fēng)級 空氣質(zhì)量 日期 2019-09-04 32℃ 19℃ 晴 東南風(fēng) 2級 良 2019-09-05 33℃ 20℃ 晴 東南風(fēng) 2級 良 2019-09-06 33℃ 20℃ 晴 東南風(fēng) 1級 良 2019-09-01 33℃ 19℃ 多云~晴 西南風(fēng) 2級 良 2019-09-02 34℃ 20℃ 晴 南風(fēng) 2級 良 ''' #注意如果要獲取某一天的數(shù)據(jù),則必須使用切片,比如df['2019/9/1':'2019/9/1'] ''' 獲取一段時間 df1.truncate(after = '2019-9-01') # 返回 after 以前的數(shù)據(jù) df1.truncate(before = '2019-9-01') # 返回 before 以后的數(shù)據(jù) df1['20190901':'2019/9/10'] ''' #方法五 #讀取文件時,通過parse_dates=['日期'],將日期轉(zhuǎn)化為datetime類型,相當(dāng)于 pd.to_datetime。同時可以使用index_col將那一列作為的行索引,相當(dāng)有set_index。 df2 = pd.read_csv('./TianQi.csv',parse_dates=['日期']) df2['年'] = df2['日期'].dt.year df2['月'] = df2['日期'].dt.month qstr = "年=='2019' and 月=='9'" print(df2.query(qstr).head()) ''' 打印: 日期 最高溫度 最低溫度 天氣 風(fēng)向 風(fēng)級 空氣質(zhì)量 年 月 243 2019-09-04 32℃ 19℃ 晴 東南風(fēng) 2級 良 2019 9 244 2019-09-05 33℃ 20℃ 晴 東南風(fēng) 2級 良 2019 9 245 2019-09-06 33℃ 20℃ 晴 東南風(fēng) 1級 良 2019 9 246 2019-09-01 33℃ 19℃ 多云~晴 西南風(fēng) 2級 良 2019 9 247 2019-09-02 34℃ 20℃ 晴 南風(fēng) 2級 良 2019 9 ''' ''' dt的其他常用屬性和方法如下: df['日期'].dt.day # 提取日期 df['日期'].dt.year # 提取年份 df['日期'].dt.hour # 提取小時 df['日期'].dt.minute # 提取分鐘 df['日期'].dt.second # 提取秒 df['日期'].dt.week # 一年中的第幾周 df['日期'].dt.weekday # 返回一周中的星期幾,0代表星期一,6代表星期天 df['日期'].dt.dayofyear # 返回一年的第幾天 df['日期'].dt.quarter # 得到每個日期分別是第幾個季度。 df['日期'].dt.is_month_start # 判斷日期是否是每月的第一天 df['日期'].dt.is_month_end # 判斷日期是否是每月的最后一天 df['日期'].dt.is_leap_year # 判斷是否是閏年 df['日期'].dt.month_name() # 返回月份的英文名稱 df['日期'].dt.to_period('Q') # M 表示月份,Q 表示季度,A 表示年度,D 表示按天 df['日期'].dt.weekday_name # 返回星期幾的英文 由于pandas版本問題,改變pandas版本在cmd中輸入:pip install --upgrade pandas==0.25.3 Series.dt.normalize() # 函數(shù)將給定系列對象中的時間轉(zhuǎn)換為午夜。 '''
到此這篇關(guān)于pandas 按日期范圍篩選數(shù)據(jù)的實現(xiàn)的文章就介紹到這了,更多相關(guān)pandas 日期范圍篩選內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
標(biāo)簽:哈爾濱 平頂山 烏蘭察布 海南 合肥 郴州 烏蘭察布 大慶
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《pandas 按日期范圍篩選數(shù)據(jù)的實現(xiàn)》,本文關(guān)鍵詞 pandas,按,日期,范圍,篩選,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。