pandas系列:drop,dropna,fillna,cut,isnull用法


1、dropna():丟掉所有帶有NAN的項/行

DataFrame.dropnaselfaxis = 0how ='any'thresh = Nonesubset = Noneinplace = False 

axis:

  • 0:刪除包含缺失值的行。

  • 1:刪除包含缺失值的列。

 

how:

  • any':如果一行/列存在任何NA值,則刪除該行或列。

  • 'all':如果一行/列所有值均為NA,則刪除該行或列。

 

thresh:一個可選的int

  • 表示保留至少有幾個非NAN值的行/列
  • 比如thresh=3,表示只有這一行非NAN值數>=3,才會被保留

 

subset:在哪些列中查看是否有NAN值

  • 如 df.dropna(subset=['name''born'])返回在'name','born'這兩列都沒有NAN值的行

 

inplace

  • True在原表上進行修改
  • False不在原表上進行修改
sample_incomplete_rows.dropna(subset=["total_bedrooms"]) 

 

 

drop():從行或列中刪除指定的標簽

 

DataFrame.dropselflabels = Noneaxis = 0index = Nonecolumn = Nonelevel = Noneinplace = Falseerrors ='raise' 

 

labels:要刪除的索引index或列column的標簽

 

axis:

  • 0:從索引開始刪除
  • 1:從列開始刪除

 

column:

  • df.drop(['B''C'], axis=1) == df.drop(columns=['B''C'])
  • index同理

 

level:代表標簽所在級別,接受int/索引名,默認為None

  • 對於MultiIndex,將從中刪除對應級別的標簽。

 

errors:默認為"raise"

 

ignore:抑制錯誤,僅當標簽存在時才會刪除,需要刪除的標簽不存在也不會報錯

sample_incomplete_rows.drop("total_bedrooms", axis=1) 

 

  

fillna():使用指定的方法填充NA / NaN值。

 

DataFrame.fillnaselfvalue = Nonemethod = Noneaxis = Noneinplace = Falselimit = Nonedowncast = None 

 

method:{'backfill','bfill','pad','ffill',None},默認為None

  • ffill / pad: 使用前一個值來填充缺失值
  • backfill / bfill :使用后一個值來填充缺失值

 

limit:int, 默認值None

  • 如果指定了method,則這是要向前/向后填充的連續NaN值的最大數量。
    pd.cut(d_cut['number'], 4)
  • 換句話說,如果存在連續的NaN數量大於此數量的缺口,它將僅被部分填充。
  • 如果未指定method,則這是將填寫NaN的整個軸上的最大條目數。

 

downcast:如果可以,將向下轉換為適當的相等類型,如float64->int64

  •  downcast='infer'系統將自動嘗試向下轉換

 

median = housing["total_bedrooms"].median() sample_incomplete_rows["total_bedrooms"].fillna(median, inplace=True)

 

pandas.cut():將數據進行離散化

pandas.cut(xbinsright: bool = Truelabels=Noneretbins: bool = Falseprecision: int = 3include_lowest: bool = Falseduplicates: str = 'raise')

 

x:

  • 要合並的數組,必須是一維的。

 

bins:

  • int型,將X划分為多少等間距的區間
  • 參考:https://zhuanlan.zhihu.com/p/68194655
  • 比如X = 0,1,4,9,16,25,36,49,64,81,100
  • pd.cut(X,4) = (-0.1,25], (-0.1,25], (-0.1,25], (-0.1,25], (-0.1,25], (-0.1,25], (25,50], (25,50], (50,75], (75,100], (75,100]
  • 把數據按照由小到大的順序平均切分成了4份, 每份的值的跨度大約是25。實際就是0~100之間空隔為100,分成4份,每份間距為25.
  • 最左邊的值, 一般設置成最小值(0)減去最大值(100)的0.1%, 也就是0 - 100*0.1% = -0.1。
  • bins是列表時,代表的是分組的區間,如29在[25,36]區間,46在[43,50]區間
  • pd.cut(X, 4).value_counts()可以查看每個分組里變量的個數

 

right:

  • 最后一個bins是否包含最右邊的數據,默認為True
  • 說人話就是最右面的數和X中最大的數是不是一個

 

labels:

  • 數組或False,默認為None
  • 指定返回的bins的標簽,必須與bins的長度相等
  • 如果為False,則僅返回bins的整數指示符。
  • 果為True,則會引發錯誤。
  • 當bins是IntervalIndex(我理解就是列表一類) 時,將忽略此參數

 

rebins:

  • bool,是否返回bins,默認為False。當傳入True時,額外返回bins的每個分組的邊界值。

 

precision:

  • int,精度,默認為3

 

include_lowest:

  • bool,默認為False
  • 第一個時間間隔是否應包含在內。

 

duplicates:

  • 默認為'raise',可選'drop'
  • 如果bin邊緣不是唯一的,請引發ValueError或丟棄非唯一性。
import pandas as pd import numpy as np factors = np.array([29, 37, 46, 52, 77]) print('原數組為:',factors) print('bins=4的情況下:',pd.cut(factors, 4)) print('bins為列表的情況下:',pd.cut(factors, bins=[25,36,43,50,57,67,80])) print(pd.cut(factors, 4, labels=False)) print(pd.cut(factors, 4, labels=["分組1", "分組2", "分組3", "分組4"]))

 

結果所示,其中labels是根據分組來確定他是哪個標簽的,如圖(28.952, 41.0]是第一個划分區間,20,37都在內,所以他們的標簽都是0.

 

pandas.isnull():

  • 檢查是否有缺失值並在相應位置返回True/False

 

pandas.isnull().any():

  • 默認為列
  • axis=1即返回行
  • 只要該列或行有空值或NA值,就返回True,否則返回False

 

pd[pd.isnull().values==True]:

  • 返回有空值的行,並顯示NA值的位置

 

pd.isnull().sum():

  • 返回每列缺失值個數

 

df.columns[df.isnull().any()].tolist():

  • 返回有缺失值的列的列數

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM