最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

11個Python Pandas小技巧讓你的工作更高效(附代碼實例)

 更新時間:2019年04月30日 09:40:50   作者:THU數(shù)據(jù)派  
這篇文章主要介紹了11個Python Pandas小技巧讓你的工作更高效(附代碼實例),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

本文為你介紹Pandas隱藏的炫酷小技巧,我相信這些會對你有所幫助。

或許本文中的某些命令你早已知曉,只是沒意識到它還有這種打開方式。

Pandas是一個在Python中廣泛應用的數(shù)據(jù)分析包。市面上有很多關(guān)于Pandas的經(jīng)典教程,但本文介紹幾個隱藏的炫酷小技巧,我相信這些會對你有所幫助。

1. read_csv

這是讀取數(shù)據(jù)的入門級命令。當要你所讀取的數(shù)據(jù)量特別大時,試著加上這個參數(shù)nrows = 5,就可以在載入全部數(shù)據(jù)前先讀取一小部分數(shù)據(jù)。如此一來,就可以避免選錯分隔符這樣的錯誤啦(數(shù)據(jù)不一定都是用逗號來分隔)。

(或者在linux系統(tǒng)中,你可以使用‘head'來展示任意文本文件的前五行:head -c 5 data.txt)

接下來,用 df.columns.tolist() 可以提取每一列并轉(zhuǎn)換成list。還可以加上usecols = [‘c1', ‘c2', … ]來載入所需要的指定列。另外,如果你知道某些列的類型,你可以加上dtype = {‘c1': str, ‘c2': int, …} ,這樣會加快載入的速度。加入這些參數(shù)的另一大好處是,如果這一列中同時含有字符串和數(shù)值類型,而你提前聲明把這一列看作是字符串,那么這一列作為主鍵來融合多個表時,就不會報錯了。

2. select_dtypes

如果已經(jīng)在Python中完成了數(shù)據(jù)的預處理,這個命令可以幫你節(jié)省一定的時間。在讀取了表格之后,每一列的默認數(shù)據(jù)類型將會是bool,int64,float64,object,category,timedelta64,或者datetime64。首先你可以觀察一下大致情況,使用:

df.dtypes.value_counts() 

來了解你的dataframe的每項數(shù)據(jù)類型,然后再使用:

df.select_dtypes(include=['float64', 'int64']) 

獲取一個僅由數(shù)值類型組成的sub-dataframe。

3. copy

如果你沒聽說過它的話,我不得強調(diào)它的重要性。輸入下面的命令:

import pandas as pd 
df1 = pd.DataFrame({ 'a':[0,0,0], 'b': [1,1,1]}) 
df2 = df1 
df2['a'] = df2['a'] + 1 
df1.head() 

你會發(fā)現(xiàn)df1已經(jīng)發(fā)生了改變。這是因為df2 = df1并不是生成一個df1的復制品并把它賦值給df2,而是設(shè)定一個指向df1的指針。所以只要是針對df2的改變,也會相應地作用在df1上。為了解決這個問題,你既可以這樣做:

df2 = df1.copy() 

也可以這樣做:

from copy import deepcopy 
df2 = deepcopy(df1) 

4. map

這個炫酷的命令讓你的數(shù)據(jù)轉(zhuǎn)換變得輕松。首先定義一個

dictionary,“key”是轉(zhuǎn)換前的舊值,而“values”是轉(zhuǎn)換后的新值。

level_map = {1: 'high', 2: 'medium', 3: 'low'} 
df['c_level'] = df['c'].map(level_map) 

幾個適用情景:把True、False,轉(zhuǎn)換成1、0(為了建模);定義級別;使用字典編碼。

5. 用不用apply?

如果我們想在現(xiàn)有幾列的基礎(chǔ)上生成一個新列,并一同作為輸入,那么有時apply函數(shù)會相當有幫助。

def rule(x, y): 
 if x == 'high' and y > 10: 
 return 1 
 else: 
 return 0 
df = pd.DataFrame({ 'c1':[ 'high' ,'high', 'low', 'low'], 'c2': [0, 23, 17, 4]}) 
df['new'] = df.apply(lambda x: rule(x['c1'], x['c2']), axis = 1) 
df.head() 

在上面的代碼中,我們定義了一個有兩個輸入變量的函數(shù),并依靠apply函數(shù)使其作用到列“c1”和“c2”上。

但是apply函數(shù)在有些情況下實在是太慢了。如果你是想計算“c1”和“c2”列的最大值,你當然可以這樣去做:

df['maximum'] = df.apply(lambda x: max(x['c1'], x['c2']), axis = 1) 

但你會發(fā)現(xiàn)相比于以下命令,apply實在是慢太多了:

df['maximum'] = df[['c1','c2']].max(axis =1) 

結(jié)論:如果你可以采用其他內(nèi)置函數(shù)(他們一般速度更快),請不要使用apply。比如說,如果你想把“c”列的值近似取整,那么請用round(df[‘c'], 0)或df['c'],round(0)而不是上文的apply函數(shù)。

7. value counts

這個命令用于檢查值的分布。你想要檢查下“c”列中出現(xiàn)的值以及每個值所出現(xiàn)的頻率,可以使用:

df['c'].value_counts( 

下面是一些有用的小技巧/參數(shù):

  • normalize = True:查看每個值出現(xiàn)的頻率而不是頻次數(shù)。
  • dropna = False: 把缺失值也保留在這次統(tǒng)計中。
  • sort = False: 將數(shù)據(jù)按照值來排序而不是按照出現(xiàn)次數(shù)排序。
  • df[‘c].value_counts().reset_index(): 將這個統(tǒng)計表轉(zhuǎn)換成pandas的dataframe并且進行處理。

8. 缺失值的數(shù)量

當構(gòu)建模型時,我們可能會去除包含過多缺失值或是全部是缺失值的行。這時可以使用.isnull()和.sum()來計算指定列缺失值的數(shù)量。

import pandas as pd 
import numpy as np 
df = pd.DataFrame({ 'id': [1,2,3], 'c1':[0,0,np.nan], 'c2': [np.nan,1,1]}) 
df = df[['id', 'c1', 'c2']] 
df['num_nulls'] = df[['c1', 'c2']].isnull().sum(axis=1) 
df.head() 

在SQL中我們可以使用 SELECT * FROM … WHERE ID in (‘A001',‘C022', …)來獲取含有指定ID的記錄。如果你也想在Pandas中做類似的事情,你可以使用:

df_filter = df['ID'].isin(['A001','C022',...]) 
df[df_filter] 

10. 基于分位數(shù)分組

面對一列數(shù)值,你想將這一列的值進行分組,比如說最前面的5%放入組別一,5-20%放入組別二,20%-50%放入組別三,最后的50%放入組別四。當然,你可以使用pandas.cut,但你也可以使用下面這種選擇:

import numpy as np 
cut_points = [np.percentile(df['c'], i) for i in [50, 80, 95]] 
df['group'] = 1 
for i in range(3): 
 df['group'] = df['group'] + (df['c'] < cut_points[i]) 
# or <= cut_points[i] 

這種方法的運行速度很快(并沒有使用到apply函數(shù))。

11. to_csv

這又是一個大家都會用的命令。我想在這里列出兩個小技巧。首先是

print(df[:5].to_csv()) 

你可以使用這個命令打印出將要輸出文件中的前五行記錄。

另一個技巧是用來處理整數(shù)值和缺失值混淆在一起的情況。如果一列含有缺失值和整數(shù)值,那么這一列的數(shù)據(jù)類型會變成float而不是int。當導出表格時,你可以加上float_format=‘%.0f'以便將所有的浮點數(shù)近似成整數(shù)。當你想把所有列的輸出值都變成整數(shù)格式時,就可以使用這個技巧,這樣一來你就會告別所有數(shù)值后帶“.0”的煩惱。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python?Pandas之DataFrame索引及選取數(shù)據(jù)

    python?Pandas之DataFrame索引及選取數(shù)據(jù)

    這篇文章主要介紹了python?Pandas之DataFrame索引及選取數(shù)據(jù),文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-07-07
  • Python Django 封裝分頁成通用的模塊詳解

    Python Django 封裝分頁成通用的模塊詳解

    這篇文章主要介紹了Python Django 封裝分頁成通用的模塊詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • 后端開發(fā)使用pycharm的技巧(推薦)

    后端開發(fā)使用pycharm的技巧(推薦)

    這篇文章主要介紹了后端開發(fā)使用pycharm的技巧,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • python?pandas如何使用loc和iloc讀取行數(shù)據(jù)或列數(shù)據(jù)

    python?pandas如何使用loc和iloc讀取行數(shù)據(jù)或列數(shù)據(jù)

    這篇文章主要給大家介紹了關(guān)于python?pandas如何使用loc和iloc讀取行數(shù)據(jù)或列數(shù)據(jù)的相關(guān)資料,在學習機器學習的過程中對數(shù)據(jù)進行預處理時避免不了需要使用Pandas進行大量操,需要的朋友可以參考下
    2023-10-10
  • Python學習Turtle庫畫對稱勾股樹體會分形驚艷

    Python學習Turtle庫畫對稱勾股樹體會分形驚艷

    這篇文章主要為大家介紹了Python學習中如何使用Turtle庫畫對稱勾股樹,從而體會到分形世界的驚艷,文中附含詳細示例代碼有需要的朋友可以借鑒參考下
    2021-09-09
  • PyHacker實現(xiàn)網(wǎng)站后臺掃描器編寫指南

    PyHacker實現(xiàn)網(wǎng)站后臺掃描器編寫指南

    這篇文章主要為大家介紹了PyHacker實現(xiàn)網(wǎng)站后臺掃描器編寫指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • python讀取dicom圖像示例(SimpleITK和dicom包實現(xiàn))

    python讀取dicom圖像示例(SimpleITK和dicom包實現(xiàn))

    今天小編就為大家分享一篇python讀取dicom圖像示例(SimpleITK和dicom包實現(xiàn)),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • python中字符串拼接的幾種方法及優(yōu)缺點對比詳解

    python中字符串拼接的幾種方法及優(yōu)缺點對比詳解

    在 Python 中,字符串拼接是常見的操作,Python 提供了多種方法來拼接字符串,每種方法有其優(yōu)缺點和適用場景,以下是幾種常見的字符串拼接方法,需要的朋友可以參考下
    2025-03-03
  • 跟老齊學Python之list和str比較

    跟老齊學Python之list和str比較

    list和str兩種類型數(shù)據(jù),有不少相似的地方,也有很大的區(qū)別。本講對她們做個簡要比較,同時也是對前面有關(guān)兩者的知識復習一下,所謂“溫故而知新”。
    2014-09-09
  • Python將數(shù)據(jù)生成二維碼的四種方法實例代碼

    Python將數(shù)據(jù)生成二維碼的四種方法實例代碼

    二維碼在日常生活中非常常見,廣泛應用于支付、登錄驗證、信息分享等場景,下面這篇文章主要給大家介紹了關(guān)于Python將數(shù)據(jù)生成二維碼的四種方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-09-09

最新評論

中牟县| 江源县| 通辽市| 清远市| 喀喇| 滕州市| 宜君县| 安新县| 额济纳旗| 牙克石市| 麻江县| 修武县| 河间市| 永济市| 滨海县| 南汇区| 衡阳县| 芒康县| 定西市| 温宿县| 师宗县| 安宁市| 巴南区| 海口市| 湖北省| 沅陵县| 石棉县| 师宗县| 滨海县| 广汉市| 安远县| 彩票| 琼结县| 遂宁市| 金沙县| 宣武区| 罗甸县| 保定市| 邢台县| 广德县| 英超|