日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

30 个 Pandas技巧,加速你的数据分析处理速度!

發(fā)布時間:2023/12/19 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 30 个 Pandas技巧,加速你的数据分析处理速度! 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

今天給大家分享的是我日常在做數(shù)據(jù)處理中總結(jié)的一些熊貓技巧

pandas的下載

使用命令下載:

pip?install?pandas

或者自行下載whl文件安裝

https://www.lfd.uci.edu/~gohlke/pythonlibs/

創(chuàng)建DataFrame數(shù)據(jù)

pd_data?=?pd.DataFrame({"name":["小明","小紅","小孫","王小","關(guān)宇","劉蓓","張菲"],"age":[20,18,27,20,28,18,25],"sex":["男","女","男","男","男","女","女"],"score":[669,570,642,590,601,619,701],"address":["北京","深圳","廣州","武漢","深圳","廣州","長沙"] })print(pd_data)

讀取本地文件

pd_data?=?pd.read_excel('./測試.xlsx')pd.set_option('display.max_columns',?None)???#?顯示完整的列 pd.set_option('display.max_rows',?None)??#?顯示完整的行 pd.set_option('display.expand_frame_repr',?False)??#?設(shè)置不折疊數(shù)據(jù)print(pd_data)

查看數(shù)據(jù)是否有缺失

#?如果缺失顯示為True,否則顯示False isnull?=?pd_data.isnull()???????? print(isnull)

統(tǒng)計缺失值個數(shù)

#?統(tǒng)計缺失值個數(shù) null_count?=?pd_data.isnull().sum() print(null_count)

缺失值填充

#?填充數(shù)據(jù)?我選擇了8.888,你隨意 pd_data.fillna(8.888,?inplace=True) print(pd_data)

缺失值刪除

#?如果有缺失值,刪除此行 exist_col?=?pd_data.dropna() print(exist_col)

查看頭尾文件

#?查看頭尾文件 print('頭文件:',?pd_data.head()) print('尾文件:',?pd_data.tail())

取單列值

#?單列值 pd_data?=?pd.read_excel('./測試.xlsx') print(pd_data['全款價'])

取多列值

#?多列值 pd_data?=?pd.read_excel('./測試.xlsx') print(pd_data[['車輛概況',?'全款價']])

單條件取值

pd_data?=?pd.read_excel('./測試.xlsx') print(pd_data[pd_data['全款價']?==?4]) print('-'*100) print(pd_data[pd_data['汽車排量']?==?'2.0T'])

多條件取值-與

#?多條件篩選數(shù)據(jù) print(pd_data[(pd_data['車齡']?==?'2018年')?&?(pd_data['變速箱']?==?'自動')])

多條件取值-或

#?多條件篩選數(shù)據(jù) print(pd_data[(pd_data['車齡']?==?'2018年')?|?(pd_data['變速箱']?==?'自動')])

字符串的開始函數(shù)

#?找出在?車輛概況?中以'大眾'開頭的 cars?=?pd_data[pd_data['車輛概況'].str.startswith('大眾')] print(cars)

字符串的結(jié)尾函數(shù)

#?找出在?車輛概況?中以'豪華型'結(jié)尾的 cars?=?pd_data[pd_data['車輛概況'].str.endswith('豪華型')] print(cars)


字符串的包含函數(shù)???????????????

#?找出在?車輛概況?中包含'進口'的 cars?=?pd_data[pd_data['車輛概況'].str.contains('進口')] print(cars)

統(tǒng)計元素個數(shù)

#?統(tǒng)計?過戶分類?以及對應(yīng)次數(shù) trans_count?=?pd_data['過戶情況'].value_counts() print(trans_count)

為了便于進一步的數(shù)據(jù)分析,我希望將它們置于不同的數(shù)組之中,可以采用如下方法:

#?統(tǒng)計?過戶分類?以及對應(yīng)次數(shù) trans_count?=?pd_data['過戶情況'].value_counts() #?針對于過戶情況的分類 x1_data?=?trans_count.index.tolist()???? #?分類后各組數(shù)據(jù)的統(tǒng)計 x2_data?=?trans_count.tolist()??????print(x1_data) print(x2_data)

這種格式的數(shù)據(jù)才是最適合做可視化分析的!

這里再多介紹兩種方法,條條大路通羅馬

都能輕松實現(xiàn)你的目標。

#?統(tǒng)計?過戶分類?以及對應(yīng)次數(shù) trans_count?=?pd_data['過戶情況'].value_counts() #?針對于過戶情況的分類 x1_data?=?trans_count.index.tolist() x11_data?=?trans_count.index x12_data?=?trans_count.index.values #?類后各組數(shù)據(jù)的統(tǒng)計 x2_data?=?trans_count.tolist() print('index.tolist():',?x1_data) print('index:',?x11_data) print('index.values:',?x12_data) print('x2:',?x2_data)

分割字符串

這個功能也很實用,大家可以看看我的汽車名稱數(shù)據(jù)這一列,我的目標僅僅是車名而已,后面的車型、車齡、排列、變速箱信息對我來說都是冗余信息。

非常不利于我后續(xù)數(shù)據(jù)可視化

所以字符串分割在這里就顯得尤為重要。

#?對?汽車名稱?這一列按照空格分割?并取第一個字符 pd_data['汽車名稱']?=?pd_data['車輛概況'].map(lambda?x:?x.split("?")[0]) name?=?pd_data['汽車名稱'].value_counts() #?汽車名稱分類 name1?=?name.index.tolist()?? #?汽車名稱對應(yīng)數(shù)量 name2?=?name.tolist()?? print(name1) print(name2)

看到我取出來數(shù)據(jù)的樣子了嗎,要的就是這個!

清理數(shù)據(jù)

當我們相對汽車里程做進一步的分析時會發(fā)現(xiàn)數(shù)據(jù)后面都有一個'萬公里',這種數(shù)據(jù)要做可視化必須先對數(shù)據(jù)進行處理,

就是先要去除數(shù)字后面的字符

我們可以使用字符串的replace()方法,使用空格替換字符

pd_data.loc[:,?'表顯里程new']?=?pd_data['表顯里程'].str.replace('萬公里',?'').astype('float32')??#?去除?30?’萬公里‘ #?保存數(shù)據(jù) pd_data.to_excel('測試1.xlsx')

黃色一列是我們處理之前的數(shù)據(jù)

綠色一列是我們處理之后的數(shù)據(jù)

已經(jīng)達到了我們想要的效果

劃分區(qū)間

現(xiàn)在有這么一個需求,我想要按照汽車的行駛里程分類,基本上每個車的行駛里程都是不一樣的,如果將每個數(shù)據(jù)都反映在圖標上就會看起來很冗余,

也就失去了作圖的意義

所以我們可以按照區(qū)間來劃分,例如5w-10w公里、10w-15w公里這樣圖表展示展示出來的效果就會很好了。


pd_data.loc[:,?'表顯里程new']?=?pd_data['表顯里程'].str.replace('萬公里',?'').astype('float32')??#?去除?30?’萬公里‘ #?劃分區(qū)間 pd_data['里程區(qū)間']?=?pd.cut(pd_data['表顯里程new'],?[0,?2,?4,?6,?8,?10,?20],labels=['0-2',?'2-4',?'4-6',?'6-8',?'8-10',?'>10']) mile?=?pd_data['里程區(qū)間'].value_counts() mile1?=?mile.index.tolist()?????????#?里程區(qū)間分類 mile2?=?mile.tolist()???????????????#?里程區(qū)間分類對應(yīng)數(shù)量 print(mile1) print(mile2)

重置索引

其實我們在上面案例的演示中已經(jīng)發(fā)現(xiàn)了,根據(jù)條件取出來的數(shù)據(jù)的索引都是處理數(shù)據(jù)之前的索引,

我們現(xiàn)在要重置索引的話要怎么辦呢?

我們可是使用reset_index()來索引重置

重置索引前:

#?找出在?過戶情況?中所有'0次'的汽車 cars?=?pd_data[pd_data['過戶情況'].str.contains('0次')] print(cars.reset_index())

重置索引后:

很好,但是不完美。多了一列colm name叫做 index的先前序列號。

不想看到它,有辦法嗎?

drop = True

#?找出在?過戶情況?中所有'0次'的汽車 cars?=?pd_data[pd_data['過戶情況'].str.contains('0次')] print(cars.reset_index(drop=True))

column重命名

#?重命名 pd_data?=?pd_data.rename(columns?=?{'車輛概況':'車輛詳情'}) print(pd_data)

分組統(tǒng)計groupby-單條件

#?統(tǒng)計不同變速箱總里程 pd_data.loc[:,?'表顯里程new']?=?pd_data['表顯里程'].str.replace('萬公里',?'').astype('float32')????#?去除?30?’萬公里‘ trans_mile?=?pd_data.groupby('變速箱')['表顯里程new'].sum() print(trans_mile)

分組統(tǒng)計groupby-多條件

#?統(tǒng)計不同變速箱和過戶情況總里程 pd_data.loc[:,?'表顯里程new']?=?pd_data['表顯里程'].str.replace('萬公里',?'').astype('float32')????#?去除?30?’萬公里‘ trans_mile?=?pd_data.groupby(['變速箱','過戶情況'])['表顯里程new'].sum() print(trans_mile)

如果再加上一個重置索引?trans_mile.reset_index()

求平均

#?統(tǒng)計不同過戶次數(shù)車輛平均里程 pd_data.loc[:,?'表顯里程new']?=?pd_data['表顯里程'].str.replace('萬公里',?'').astype('float32')????#?去除?30?’萬公里‘ trans_mile?=?pd_data.groupby('過戶情況')['表顯里程new'].mean() print(trans_mile.reset_index())

apply函數(shù)

還記得我們爬取大學的那個教程嗎?

爬蟲+數(shù)據(jù)可視化選大學,小學妹直呼牛X

我們爬出來的數(shù)據(jù)如果是985或者是211顯示為1,

如果非985或者211,顯示為2

現(xiàn)在我不想要1和2了,因為我看不懂它是什么意思?如果是985或者211,就顯示是,如果不是,就顯示否!

pd_data?=?pd.read_excel('./全國高校數(shù)據(jù).xlsx') print(pd_data) pd_data1?=?pd_data.copy()??#?生成一個副本,?防止數(shù)據(jù)損壞 pd_data['f985']?=?pd_data['f985'].apply(lambda?x:?'是'?if?x?==?1?else?'否')???????#?通過匿名函數(shù)解決 pd_data['f211']?=?pd_data['f985'].apply(lambda?x:?'是'?if?x?==?1?else?'否')???????#?通過匿名函數(shù)解決 print(pd_data)

同理利用lambda函數(shù)我們還可以

給省份這一列后面加個''

pd_data?=?pd.read_excel('./全國高校數(shù)據(jù).xlsx') print(pd_data) pd_data1?=?pd_data.copy()??#?生成一個副本,?防止數(shù)據(jù)損壞pd_data['province_name']?=?pd_data['province_name'].apply(lambda?x:?x+'省')???????#?通過匿名函數(shù)解決 print(pd_data) '''

同理利用lambda函數(shù)我們還可以給

人氣值view_total這一列最后面的'w'

pd_data['view_total']?=?pd_data['view_total'].apply(lambda?x:?x[:-1])???????#?通過匿名函數(shù)解決 print(pd_data)

求最大最小值

max_view_total?=?pd_data[pd_data['view_total']?==?pd_data['view_total'].max()] print(max_view_total)

min_view_total?=?pd_data[pd_data['view_total']?==?pd_data['view_total'].min()] print(min_view_total)

時間提取

為了便于演示,我加上了一列 Date 選項,如下:

現(xiàn)在我們想提取其中的年份或者月份,我們可以使用 'DatetimeIndex'這個方法來實現(xiàn)。

pd_data?=?pd.read_excel('./全國高校數(shù)據(jù).xlsx') pd_data['year']?=?pd.DatetimeIndex(pd_data['Date']).year pd_data['month']?=?pd.DatetimeIndex(pd_data['Date']).month pd_data['day']?=?pd.DatetimeIndex(pd_data['Date']).day print(pd_data)

增加列

我想把剛才的生成的年+月+日方法到前三列,可以使用insert()方法來實現(xiàn)

Year?=?pd.DatetimeIndex(pd_data['Date']).year Month?=?pd.DatetimeIndex(pd_data['Date']).month day?=?pd.DatetimeIndex(pd_data['Date']).day pd_data.insert(0,?'Year',?Year) pd_data.insert(1,?'Month',?Month) pd_data.insert(2,?'day',?day) print(pd_data)

點擊下方卡片進行關(guān)注,獲取更多內(nèi)容

點分享

點收藏

點點贊

點在看

總結(jié)

以上是生活随笔為你收集整理的30 个 Pandas技巧,加速你的数据分析处理速度!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。