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():
- 返回有缺失值的列的列数