pandas处理缺失值
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
# 1.NaN是浮点类型
type(np.nan)
# np.nan与任何数运算,仍为nan
np.nan + 1
# 不用python的None原因:因为object类型的运算要比int类型的运算慢得多
# pandas会将python的None处理成np.nan
df1 = DataFrame(np.random.randint(0, 150, (2,3)), list("ab"), list("ABC"))
df1
df1.loc["a","A"] = None # 会让A列的数据类型从int32变为float64
df1
df1.dtypes
# 2.DataFrame的.isnull()
df1.isnull()
# 默认是列方向
df1.isnull().any() # 查看每一列中至少有一个空值
# 查看行方向上...
df1.isnull().any(axis=1)
df1.notnull().all() # 查看每一列所有值都是非空的列
# .dropna() 默认删除有NaN的行
df1.dropna()
# 删除列方向上含有NaN的列
df1.dropna(axis=1)
# 删除列方向上含有NaN的列
df1.dropna(axis=1, how="all") # all表示如果某列全为NaN,就删去这一列。默认参数是any,删除包含NaN的列
# 3.填充.fillna()
df1
# 用10来填充NaN
df1.fillna(value=10)
# 方式一:用聚合指标来填
user_df = DataFrame({
"height": np.random.randint(150,180,(4)),
"weight": np.random.randint(120,140,(4)),
"age": np.random.randint(20,25,(4))
}, index=["lucy", "tom", "jack", "tony"])
user_df
user_df.loc["lucy","weight"] = np.nan
user_df.loc["tom","height"] = np.nan
user_df.loc["tony","age"] = np.nan
user_df
user_mean = user_df.mean() # 返回的是Series
user_mean
user_df.fillna(value=user_mean) # 相当于用Series填充DataFrame,遵循索引对齐
# 简便写法
user_df.fillna(value=user_df.mean())
# 方式二、用相邻值来填充
# ffill使用上一个填充下一个
# backfill / bfill使用下一个填充上一个
# axis控制是行还是是列,axis=0是行,axis=1是列
# user_df.fillna(axis=0, method="ffill") # 报了个提示说未来版本将要弃用
user_df.ffill()
user_df.ffill(axis=1)
user_df.bfill()
user_df
练习
1.简述None与NaN的区别
2.假设张三李四参加模拟考试,但张三因为突然想明白人生放弃了英语考试,因此记为None,请据此创建一个DataFrame,命名
为ddd3
3.老师决定根据用数学的分数填充张三的英语成绩,如何实现?用李四的英语成绩填充张三的英语成绩?
1.运算速度:None的运算比NaN慢(对象类型运算效率低于float)
2.数据类型:None在运算中是对象类型,NaN是float类型
3.是否为数值:None是一个数值,NaN不是一个数值
4.pandas会自动将None处理为NaN
index = ["张三", "李四"]
columns = ["语文", "数学", "英语"]
ddd3 = DataFrame(np.random.randint(0,150,(2,3)), index, columns)
ddd3
ddd3.loc["张三","英语"] = np.nan
ddd3
# 记住:默认是列,axis=1是行
ddd3.ffill(axis=1)
作者:cloud-2-jane
出处:https://www.cnblogs.com/cloud-2-jane/articles/18609825
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架