pandas系列:drop,dropna,fillna,cut,isnull用法
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():
- 返回有缺失值的列的列数
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本