1、dropna():丟掉所有帶有NAN的項/行
DataFrame.
dropna
(self,axis = 0,how ='any',thresh = None,subset = None,inplace = 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.
drop
(self,labels = None,axis = 0,index = None,column = None,level = None,inplace = False,errors ='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.
fillna
(self,value = None,method = None,axis = None,inplace = False,limit = None,downcast = 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
(x, bins, right: bool = True, labels=None, retbins: bool = False, precision: int = 3, include_lowest: bool = False, duplicates: 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():
- 返回有缺失值的列的列數