<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          30 個(gè) Pandas技巧,加速你的數(shù)據(jù)分析處理速度!

          共 6353字,需瀏覽 13分鐘

           ·

          2021-11-30 17:31



          今天給大家分享的是我日常在做數(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":["北京","深圳","廣州","武漢","深圳","廣州","長(zhǎng)沙"]
          })

          print(pd_data)



          讀取本地文件


          pd_data?=?pd.read_excel('./測(cè)試.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)計(jì)缺失值個(gè)數(shù)


          #?統(tǒng)計(jì)缺失值個(gè)數(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('./測(cè)試.xlsx')
          print(pd_data['全款價(jià)'])



          取多列值


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



          單條件取值


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



          多條件取值-與


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




          多條件取值-或


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



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

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




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


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


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

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





          統(tǒng)計(jì)元素個(gè)數(shù)


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


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


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

          print(x1_data)
          print(x2_data)


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


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

          都能輕松實(shí)現(xiàn)你的目標(biāo)。

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



          分割字符串


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

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

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



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


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




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


          當(dāng)我們相對(duì)汽車?yán)锍套鲞M(jìn)一步的分析時(shí)會(huì)發(fā)現(xiàn)數(shù)據(jù)后面都有一個(gè)'萬(wàn)公里',這種數(shù)據(jù)要做可視化必須先對(duì)數(shù)據(jù)進(jìn)行處理,

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



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


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


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

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

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




          劃分區(qū)間



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

          也就失去了作圖的意義


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



          pd_data.loc[:,?'表顯里程new']?=?pd_data['表顯里程'].str.replace('萬(wàn)公里',?'').astype('float32')??#?去除?30?’萬(wàn)公里‘
          #?劃分區(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ū)間分類對(duì)應(yīng)數(shù)量
          print(mile1)
          print(mile2)




          重置索引


          其實(shí)我們?cè)谏厦姘咐难菔局幸呀?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的先前序列號(hào)。

          不想看到它,有辦法嗎?

          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)計(jì)groupby-單條件

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




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


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


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




          求平均

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




          apply函數(shù)


          還記得我們爬取大學(xué)的那個(gè)教程嗎?


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


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

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



          現(xiàn)在我不想要1和2了,因?yàn)槲铱床欢鞘裁匆馑迹咳绻?85或者211,就顯示是,如果不是,就顯示否!


          pd_data?=?pd.read_excel('./全國(guó)高校數(shù)據(jù).xlsx')
          print(pd_data)
          pd_data1?=?pd_data.copy()??#?生成一個(gè)副本,?防止數(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ù)我們還可以

          給省份這一列后面加個(gè)''


          pd_data?=?pd.read_excel('./全國(guó)高校數(shù)據(jù).xlsx')
          print(pd_data)
          pd_data1?=?pd_data.copy()??#?生成一個(gè)副本,?防止數(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)



          時(shí)間提取

          為了便于演示,我加上了一列 Date 選項(xiàng),如下:



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


          pd_data?=?pd.read_excel('./全國(guó)高校數(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()方法來實(shí)現(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)


          點(diǎn)擊下方卡片進(jìn)行關(guān)注,獲取更多內(nèi)容
          點(diǎn)分享
          點(diǎn)收藏
          點(diǎn)點(diǎn)贊
          點(diǎn)在看


          瀏覽 62
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  囯产精品无码成人久久久 | 91久久久久久久久18 | 奇米影视7777久久精品 | 激情自拍视频网 | 日本无码免费视频 |