pandas是Python數(shù)據(jù)分析必備工具,它有強大的數(shù)據(jù)清洗能力,往往能用非常少的代碼實現(xiàn)較復雜的數(shù)據(jù)處理
今天,總結(jié)了pandas篩選數(shù)據(jù)的15個常用技巧,主要包括5個知識點:
比較運算:==、《、》、》=、《=、!=
范圍運算:between(left,right)
字符篩選:str.contains(pattern或字符串,na=False)
邏輯運算:&(與)、|(或)、not(取反)
比較函數(shù):eq, ne, le, lt, ge, gt(相當于==,=!,《=,《,》=,》)
apply和isin函數(shù)
”下面以超市運營數(shù)據(jù)為例,給大家逐個講解首先讀取數(shù)據(jù):
import pandas as pd
data=pd.read_excel(‘超市運營數(shù)據(jù)模板.xlsx’)
data
先看一下各列的數(shù)據(jù)類型:
data.dtypes
商品ID int64
類別ID int64
門店編號 object
單價 float64
銷量 float64
訂單ID object
日期 datetime64[ns]
時間 object
dtype: object
下面以實際應(yīng)用場景為例開始講解:
1.篩選門店編號為‘CDXL’的運營數(shù)據(jù)①第一種方法,用比較運算符‘==’:
data[data.門店編號==‘CDXL’]
②第二種方法,用比較函數(shù)‘eq’:
data[data[‘門店編號’].eq(‘CDXL’)]
2.篩選單價小于等于10元的運營數(shù)據(jù)③第一種方法,用比較運算符‘《=’:
data[data.單價《=10]
④第二種方法,用比較函數(shù)‘le’:
data[data[‘單價’].le(10)]
3.篩選銷量大于2000的運營數(shù)據(jù)⑤第一種方法,用比較運算符‘》=’:
data[data.銷量》2]
⑥第二種方法,用比較函數(shù)‘ge’:
data[data[‘銷量’].ge(2)]
4.篩選除門店‘CDXL’外的運營數(shù)據(jù)⑦第一種方法,用比較運算符‘!=’:
data[data.門店編號!=‘CDXL’]
⑧第二種方法,用比較函數(shù)‘ne’:
data[data[‘門店編號’].ne(‘CDXL’)]
5.篩選2020年5月的運營數(shù)據(jù)首先將日期格式化:
data[‘日期’]=data[“日期”].values.astype(‘datetime64’) #如果已為日期格式則此步驟可省略
data[‘日期’]
import datetime
s_date = datetime.datetime.strptime(‘2020-04-30’, ‘%Y-%m-%d’).date() #起始日期
e_date = datetime.datetime.strptime(‘2020-06-01’, ‘%Y-%m-%d’).date() #結(jié)束日期
⑨第一種方法,用邏輯運算符號‘》’ ‘《’和‘&’:
Pandasdatetime64[ns]不能直接與datetime.date相比,需要用pd.Timestamp進行轉(zhuǎn)化
data[(data.日期》pd.Timestamp(s_date))&(data.日期《pd.Timestamp(e_date))]
⑩第二種,用比較函數(shù)‘gt’‘lt’和‘&’:
data[(data[‘日期’].lt(pd.Timestamp(e_date)))&(data[‘日期’].gt(pd.Timestamp(s_date)))]
?第三種,用apply函數(shù)實現(xiàn):
id_a=data.日期.apply(lambda x: x.year ==2020 and x.month==5)
data[id_a]
?第四種,用between函數(shù)實現(xiàn):
id_b=data.日期.between(pd.Timestamp(s_date),pd.Timestamp(e_date))
data[id_b]
6.篩選“類別ID”包含‘000’的數(shù)據(jù)?第一種,用contains函數(shù):
data[‘類別ID’]=data[‘類別ID’].values.astype(‘str’) #將該列轉(zhuǎn)換為字符數(shù)據(jù)類型
id_c=data.類別ID.str.contains(‘000’,na=False)
data[id_c]
?第二種,用isin函數(shù):
id_i=data.類別ID.isin([‘000’]) #接受一個列表
data[id_i]
很遺憾,isin函數(shù)搞不定,因為它只能判斷該列中元素是否在列表中
7.篩選商品ID以“301”開頭的運營數(shù)據(jù)?需要用contains函數(shù)結(jié)合正則表達式使用:
data[‘商品ID’]=data[‘商品ID’].values.astype(‘str’) #將該列轉(zhuǎn)換為字符數(shù)據(jù)類型
id_c2=data.商品ID.str.contains(‘301d{5}’,na=False)
data[id_c2]
為了方便大家學習,我已經(jīng)將本文數(shù)據(jù)及代碼打包好,請關(guān)注 數(shù)據(jù)分析與開發(fā) 公眾號在后臺回復關(guān)鍵字:篩選數(shù)據(jù) 獲取。
原文標題:一次性總結(jié)了pandas提取數(shù)據(jù)的15種方法,統(tǒng)統(tǒng)只需1行代碼!
文章出處:【微信公眾號:數(shù)據(jù)分析與開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
責任編輯:haq
-
數(shù)據(jù)分析
+關(guān)注
關(guān)注
2文章
1452瀏覽量
34076 -
python
+關(guān)注
關(guān)注
56文章
4799瀏覽量
84810
原文標題:一次性總結(jié)了pandas提取數(shù)據(jù)的15種方法,統(tǒng)統(tǒng)只需1行代碼!
文章出處:【微信號:DBDevs,微信公眾號:數(shù)據(jù)分析與開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論