Pandas DataFrame缺失值处理:4种核心方法详解
创作时间:
作者:
@小白创作中心
Pandas DataFrame缺失值处理:4种核心方法详解
引用
1
来源
1.
https://www.cda.cn/discuss/post/details/5f42745ade734f52c64cf48d
数据清洗是数据分析项目中至关重要的一环,其中处理缺失值是数据清洗的核心任务之一。本文将详细介绍Pandas库中处理DataFrame缺失值的四种主要方法:删除缺失值(dropna)、替换缺失值(fillna)、判断缺失值(isna)和判断非缺失值(notna)。通过具体的代码示例,帮助读者掌握这些实用的函数用法。
1. 相关函数
2. 删除缺失值:dropna函数
dropna函数的参数列表如下:
DataFrame.dropna(self, axis=0, how='any', thresh=None, subset=None, inplace=False)
示例数据:
import numpy as np
import pandas as pd
df = pd.DataFrame({
"name": ['Alfred', 'Batman', 'Catwoman'],
"toy": [np.nan, 'Batmobile', 'Bullwhip'],
"born": [pd.NaT, pd.Timestamp("1940-04-25"), pd.NaT]
})
print(df)
# name toy born
# 0 Alfred NaN NaT
# 1 Batman Batmobile 1940-04-25
# 2 Catwoman Bullwhip NaT
使用示例
dropna默认参数。删除含有NA的行。其中axis=0表示删除行,how='any'表示有一个NA就删除整行/列。
df.dropna()
# name toy born
# 1 Batman Batmobile 1940-04-25
- 删除含有NA的列。参数axis=1或axis='columns'。
df.dropna(axis='columns')
# name
# 0 Alfred
# 1 Batman
# 2 Catwoman
- 当所有行/列为NA时才删除。参数how='all'。
df.dropna(how='all')
# name toy born
# 0 Alfred NaN NaT
# 1 Batman Batmobile 1940-04-25
# 2 Catwoman Bullwhip NaT
- 提高删除NA的阈值。参数thresh=2,表示行/列中的NA数量大于2才删除。
df.dropna(thresh=2)
# name toy born
# 1 Batman Batmobile 1940-04-25
# 2 Catwoman Bullwhip NaT
- 设置判断的子集。参数subset设置待判断的列/行名,这些列/行中有NA值则所在行/列被删除。
df.dropna(subset=['name', 'born'])
# name toy born
# 1 Batman Batmobile 1940-04-25
- 将处理后的df替换原本的df。参数inplace=True。
df.dropna(inplace=True)
df
# name toy born
# 1 Batman Batmobile 1940-04-25
3. 替换缺失值:fillna函数
fillna函数的参数列表如下:
DataFrame.fillna(self, value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)
示例数据:
import numpy as np
import pandas as pd
df = pd.DataFrame([
[np.nan, 2, np.nan, 0],
[3, 4, np.nan, 1],
[np.nan, np.nan, np.nan, 5],
[np.nan, 3, np.nan, 4]
], columns=list('ABCD'))
print(df)
# A B C D
# 0 NaN 2.0 NaN 0
# 1 3.0 4.0 NaN 1
# 2 NaN NaN NaN 5
# 3 NaN 3.0 NaN 4
使用示例
fillna默认参数。传入值,填充所有NA。
df.fillna(0)
# A B C D
# 0 0.0 2.0 0.0 0
# 1 3.0 4.0 0.0 1
# 2 0.0 0.0 0.0 5
# 3 0.0 3.0 0.0 4
- 设定每列NA的填充值。value为字典格式。
values = {'A': 0, 'B': 1, 'C': 2, 'D': 3}
df.fillna(value=values)
# A B C D
# 0 0.0 2.0 2.0 0
# 1 3.0 4.0 2.0 1
# 2 0.0 1.0 2.0 5
# 3 0.0 3.0 2.0 4
- 用前向值/后向值填充NA。method='fillna'表示NA被前一个值填充。例如A列2行的NA被A列1行的3.0填充,B列2行的NA被B列1行的4.0填充。
df.fillna(method='ffill')
# A B C D
# 0 NaN 2.0 NaN 0
# 1 3.0 4.0 NaN 1
# 2 3.0 4.0 NaN 5
# 3 3.0 3.0 NaN 4
- 设定每列/行的填充数。limit=1表示每列/行仅仅填充1个NA。
df.fillna(value=values, limit=1)
# A B C D
# 0 0.0 2.0 2.0 0
# 1 3.0 4.0 NaN 1
# 2 NaN 1.0 NaN 5
# 3 NaN 3.0 NaN 4
- 参数axis和inplace与dropna相同。
4. 判断缺失值:isna函数
- 判断df中所有值是否为NA。
df.isna()
# name toy born
# 0 False True True
# 1 False False False
# 2 False False True
- 判断某一列(series格式)的值是否为NA。
df['toy'].isna()
# 0 True
# 1 False
# 2 False
# Name: toy, dtype: bool
5. 判断缺失值:notna函数
与isna的结果完全相反,用法一样。
df.notna()
# name toy born
# 0 True False False
# 1 True True True
# 2 True True False
df['toy'].notna()
# 0 False
# 1 True
# 2 True
# Name: toy, dtype: bool
热门推荐
东莞厚街旅游攻略:景点、美食、住宿全攻略
任脉养生揭秘:权威数据见证古中医智慧
中医经络学说:从起源到系统组成
专家报告 | “双高”电力系统:一种新的稳定判据和稳定性分类探讨
汽车冷凝器需要清洗吗?如何清洗?
新手如何学习川崎机器人AS语言
去日本签证怎么办?护照准备有哪些要求?
元宵节为什么要猜灯谜?元宵节猜灯谜的由来和寓意
中华武术步型步法详解:从基础到实战应用
近视也能开飞机,成为飞行员需要几步?
如何探究黄金趋势的分析方法?这种分析方法有哪些实际应用?
全球金霉素龙头涨价反击!股价逆势大涨
蜇伤后刺痛难耐?揭秘天鹅绒蚂蚁“毒液”秘密
你梦见过自己会飞?走进梦的秘密
含高比例新能源的电力系统频率稳定研究综述
日本地少人多,为什么还家家户户都是“别墅”?中国能借鉴吗?
蛋白粉究竟是不是「智商税」?乳清蛋白、大豆蛋白、牛初乳、酪蛋白该怎么选?
不锈钢锅怎么开锅养锅(图文教程)
字体设计之父的创意方法:高桥善丸的设计理念与实践
餐后血糖多少合适?吃饭这样做,巧降餐后血糖
静电:遍及生活角落的神奇效应及应用
住宅小区的安全管理如何加强?这些措施如何提升居民安全感?
减肚腩的3个步骤,坚持90天,练出巧克力般的腹肌!
深入解析:标量、向量与张量的基本概念
变压器温升的影响因素
《情愿》赏析:林徽因的深情绝唱与艺术探索
广东出发值得一去的自驾线路推荐,5条广东自驾到广西最佳线路攻略
职场攻略 | 职场沟通中的 5 个关键技巧,让你的表达更有说服力
春季养生话督脉
婴儿奶粉选购指南:科学喂养的黄金法则