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慢(对象类型运算效率低于float2.数据类型: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 国际」许可协议进行许可。

posted @   一只大学生  阅读(23)  评论(0编辑  收藏  举报
编辑推荐:
· 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 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
点击右上角即可分享
微信分享提示