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

时间:2024-03-07 19:01:52

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():

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