Python 教程之 Pandas(8)—— 在 Pandas 中处理缺失数据

简介: Python 教程之 Pandas(8)—— 在 Pandas 中处理缺失数据

当没有为一个或多个项目或整个单元提供信息时,可能会出现缺失数据。在现实生活场景中,缺少数据是一个非常大的问题。缺失数据也可以指熊猫中的 NA(不可用)值。在 DataFrame 中,有时许多数据集只是带着缺失的数据到达,要么是因为它存在但未被收集,要么因为它从未存在。例如,假设被调查的不同用户可能选择不分享他们的收入,一些用户可能选择不分享地址,这样很多数据集就丢失了。

在 Pandas 中,缺失数据由两个值表示:

  • None:None 是一个 Python 单例对象,通常用于 Python 代码中的缺失数据。
  • NaN :NaN(Not a Number 的首字母缩写词),是所有使用标准 IEEE 浮点表示的系统都可以识别的特殊浮点值

Pandas 将 None 和 NaN 视为本质上可以互换以指示缺失值或空值。为了促进这一约定,Pandas DataFrame 中有几个用于检测、删除和替换空值的有用函数:

  • isnull()
  • notnull()
  • dropna()
  • fillna()
  • replace()
  • interpolate()

使用 isnull() 和 notnull() 检查缺失值

为了检查 Pandas DataFrame 中的缺失值,我们使用函数 isnull() 和 notnull()。这两个函数都有助于检查一个值是否为 NaN。这些函数也可以在 Pandas 系列中使用,以便在系列中查找空值。

使用 isnull() 检查缺失值

为了检查 Pandas DataFrame 中的空值,我们使用 isnull() 函数,该函数返回布尔值的数据帧,对于 NaN 值是 True。代码#1:

# importing pandas as pd
import pandas as pd
# importing numpy as np
import numpy as np
# 列表字典
dict = {'First Score':[100, 90, np.nan, 95],
    'Second Score': [30, 45, 56, np.nan],
    'Third Score':[np.nan, 40, 80, 98]}
# 从列表创建数据框
df = pd.DataFrame(dict)
# 使用 isnull() 函数
df.isnull()

输出:  

image.png  

代码 #2:

# importing pandas package
import pandas as pd
# 从csv文件制作数据框
data = pd.read_csv("employees.csv")
# 为 NaN 值创建布尔系列 True
bool_series = pd.isnull(data["Gender"])
# 过滤数据仅显示 Gender = NaN 的数据
data[bool_series]

输出: 如输出图像所示,仅显示 Gender = NULL 的行。

image.png  

使用 notnull() 检查缺失值

为了检查 Pandas Dataframe 中的空值,我们使用 notnull() 函数,该函数返回布尔值的数据帧,对于 NaN 值是 False。

代码#3:

# importing pandas as pd
import pandas as pd
# importing numpy as np
import numpy as np
# 列表字典
dict = {'First Score':[100, 90, np.nan, 95],
    'Second Score': [30, 45, 56, np.nan],
    'Third Score':[np.nan, 40, 80, 98]}
# 使用字典创建数据框
df = pd.DataFrame(dict)
# 使用 notnull() 函数
df.notnull()

输出:  

image.png  

代码 #4:

# importing pandas package
import pandas as pd
# 从csv文件制作数据框
data = pd.read_csv("employees.csv")
# 为 NaN 值创建布尔系列 True
bool_series = pd.notnull(data["Gender"])
# 过滤数据,仅显示 Gender = Not NaN 的数据
data[bool_series]

输出: 如输出图像所示,仅显示 Gender = NOT NULL 的行。

image.png  

使用 fillna()、replace() 和 interpolate() 填充缺失值

为了填充数据集中的空值,我们使用 fillna()、replace() 和 interpolate() 函数,这些函数用它们自己的一些值替换 NaN 值。所有这些功能都有助于在 DataFrame 的数据集中填充空值。Interpolate() 函数基本上用于填充数据帧中的 NA 值,但它使用各种插值技术来填充缺失值,而不是对值进行硬编码。代码 #1: 用单个值填充空值

# importing pandas as pd
import pandas as pd
# importing numpy as np
import numpy as np
# 列表字典
dict = {'First Score':[100, 90, np.nan, 95],
    'Second Score': [30, 45, 56, np.nan],
    'Third Score':[np.nan, 40, 80, 98]}
# 从字典创建数据框
df = pd.DataFrame(dict)
# 使用 fillna() 填充缺失值
df.fillna(0)

输出:  

image.png  

代码 #2:

用之前的值填充空值

# importing pandas as pd
import pandas as pd
# importing numpy as np
import numpy as np
# 列表字典
dict = {'First Score':[100, 90, np.nan, 95],
    'Second Score': [30, 45, 56, np.nan],
    'Third Score':[np.nan, 40, 80, 98]}
# 从字典创建数据框
df = pd.DataFrame(dict)
# 用以前的值填充缺失值
df.fillna(method ='pad')

输出:  

image.png  

代码#3: 用下一个填充空值

# importing pandas as pd
import pandas as pd
# importing numpy as np
import numpy as np
# 列表字典
dict = {'First Score':[100, 90, np.nan, 95],
    'Second Score': [30, 45, 56, np.nan],
    'Third Score':[np.nan, 40, 80, 98]}
# 从字典创建数据框
df = pd.DataFrame(dict)
# 使用 fillna() 函数填充空值
df.fillna(method ='bfill')

输出:  

image.png  

代码 #4: 在 CSV 文件中填充空值

# importing pandas package
import pandas as pd
# 从csv文件制作数据框
data = pd.read_csv("employees.csv")
# 打印数据框的前 10 到 24 行以进行可视化
data[10:25]

image.png

现在我们将用“No Gender”填充 Gender 列中的所有空值

# importing pandas package
import pandas as pd
# 从csv文件制作数据框
data = pd.read_csv("employees.csv")
# 使用 fillna() 填充空值
data["Gender"].fillna("No Gender", inplace = True)
data

输出:  

image.png

代码 #5: 使用 replace() 方法填充空值

# importing pandas package
import pandas as pd
# 从csv文件制作数据框
data = pd.read_csv("employees.csv")
# 打印数据框的前 10 到 24 行以进行可视化
data[10:25]

输出:  

image.png

现在我们要将数据框中的所有 Nan 值替换为 -99 值。

# importing pandas package
import pandas as pd
# 从csv文件制作数据框
data = pd.read_csv("employees.csv")
# 将数据框中的 Nan 值替换为 -99
data.replace(to_replace = np.nan, value = -99)

输出:  

image.png  

代码 #6: 使用 interpolate() 函数使用线性方法填充缺失值。

# importing pandas as pd
import pandas as pd
# 创建数据框
df = pd.DataFrame({"A":[12, 4, 5, None, 1],
        "B":[None, 2, 54, 3, None],
        "C":[20, 16, None, 3, 8],
        "D":[14, 3, None, None, 6]})
# 打印数据框
df

image.png

让我们使用线性方法对缺失值进行插值。请注意,线性方法忽略索引并将值视为等距。

# 插入缺失值
df.interpolate(method ='linear', limit_direction ='forward')

输出:  

image.png

正如我们所看到的输出,第一行中的值无法被填充,因为值的填充方向是向前的,并且没有可以用于插值的先前值。  

使用 dropna() 删除缺失值

为了从数据框中删除空值,我们使用了 dropna() 函数,该函数以不同的方式删除具有空值的数据集的行/列。代码 #1: 删除至少有 1 个空值的行。

# importing pandas as pd
import pandas as pd
# importing numpy as np
import numpy as np
# 列表字典
dict = {'First Score':[100, 90, np.nan, 95],
    'Second Score': [30, np.nan, 45, 56],
    'Third Score':[52, 40, 80, 98],
    'Fourth Score':[np.nan, np.nan, np.nan, 65]}
# 从字典创建数据框
df = pd.DataFrame(dict)
df

image.png

现在我们删除具有至少一个 Nan 值(Null 值)的行

# importing pandas as pd
import pandas as pd
# importing numpy as np
import numpy as np
# 列表字典
dict = {'First Score':[100, 90, np.nan, 95],
    'Second Score': [30, np.nan, 45, 56],
    'Third Score':[52, 40, 80, 98],
    'Fourth Score':[np.nan, np.nan, np.nan, 65]}
# 从字典创建数据框
df = pd.DataFrame(dict)
# 使用 dropna() 函数
df.dropna()

输出:  

image.png

代码 #2: 如果该行中的所有值都丢失,则删除行。

# importing pandas as pd
import pandas as pd
# importing numpy as np
import numpy as np
# 列表字典
dict = {'First Score':[100, np.nan, np.nan, 95],
    'Second Score': [30, np.nan, 45, 56],
    'Third Score':[52, np.nan, 80, 98],
    'Fourth Score':[np.nan, np.nan, np.nan, 65]}
# 从字典创建数据框
df = pd.DataFrame(dict)
df

image.png

现在我们删除所有数据丢失或包含空值(NaN)的行

# importing pandas as pd
import pandas as pd
# importing numpy as np
import numpy as np
# 列表字典
dict = {'First Score':[100, np.nan, np.nan, 95],
    'Second Score': [30, np.nan, 45, 56],
    'Third Score':[52, np.nan, 80, 98],
    'Fourth Score':[np.nan, np.nan, np.nan, 65]}
df = pd.DataFrame(dict)
# 使用 dropna() 函数
df.dropna(how = 'all')

输出:  

image.png

代码 #3: 删除具有至少 1 个空值的列。

# importing pandas as pd
import pandas as pd
# importing numpy as np
import numpy as np
# 列表字典
dict = {'First Score':[100, np.nan, np.nan, 95],
    'Second Score': [30, np.nan, 45, 56],
    'Third Score':[52, np.nan, 80, 98],
    'Fourth Score':[60, 67, 68, 65]}
# 从字典创建数据框
df = pd.DataFrame(dict)
df

image.png

现在我们删除至少有 1 个缺失值的列

# importing pandas as pd
import pandas as pd
# importing numpy as np
import numpy as np
# 列表字典
dict = {'First Score':[100, np.nan, np.nan, 95],
    'Second Score': [30, np.nan, 45, 56],
    'Third Score':[52, np.nan, 80, 98],
    'Fourth Score':[60, 67, 68, 65]}
# 从字典创建数据框
df = pd.DataFrame(dict)
# 使用 dropna() 函数  
df.dropna(axis = 1)

输出:

image.png  

代码 #4: 删除 CSV 文件中至少有 1 个空值的行

# importing pandas module
import pandas as pd
# 从csv文件制作数据框
data = pd.read_csv("employees.csv")
# 使用丢弃的 NA 值制作新数据框
new_data = data.dropna(axis = 0, how ='any')
new_data

输出:  

image.png

现在我们比较数据帧的大小,以便我们可以知道有多少行至少有 1 个 Null 值

print("Old data frame length:", len(data))
print("New data frame length:", len(new_data))
print("Number of rows with at least 1 NA value: ", (len(data)-len(new_data)))

输出 :

Old data frame length: 1000
New data frame length: 764
Number of rows with at least 1 NA value:  236

由于差异为 236,因此有 236 行在任何列中至少有 1 个 Null 值。


目录
相关文章
|
11天前
|
JSON 数据可视化 API
Python 中调用 DeepSeek-R1 API的方法介绍,图文教程
本教程详细介绍了如何使用 Python 调用 DeepSeek 的 R1 大模型 API,适合编程新手。首先登录 DeepSeek 控制台获取 API Key,安装 Python 和 requests 库后,编写基础调用代码并运行。文末包含常见问题解答和更简单的可视化调用方法,建议收藏备用。 原文链接:[如何使用 Python 调用 DeepSeek-R1 API?](https://apifox.com/apiskills/how-to-call-the-deepseek-r1-api-using-python/)
|
11天前
|
监控 物联网 数据处理
Pandas高级数据处理:数据流式计算
本文介绍了如何使用 Pandas 进行流式数据处理。流式计算能够实时处理不断流入的数据,适用于金融交易、物联网监控等场景。Pandas 虽然主要用于批处理,但通过分块读取文件、增量更新 DataFrame 和使用生成器等方式,也能实现简单的流式计算。文章还详细讨论了内存溢出、数据类型不一致、数据丢失或重复及性能瓶颈等常见问题的解决方案,并建议在处理大规模数据时使用专门的流式计算框架。
138 100
Pandas高级数据处理:数据流式计算
|
30天前
|
数据采集 存储 供应链
Pandas数据应用:库存管理
本文介绍Pandas在库存管理中的应用,涵盖数据读取、清洗、查询及常见报错的解决方法。通过具体代码示例,讲解如何处理多样数据来源、格式不一致、缺失值和重复数据等问题,并解决KeyError、ValueError等常见错误,帮助提高库存管理效率和准确性。
106 72
|
4天前
|
数据采集 数据可视化 数据处理
Pandas高级数据处理:数据仪表板制作
《Pandas高级数据处理:数据仪表板制作》涵盖数据清洗、聚合、时间序列处理等技巧,解决常见错误如KeyError和内存溢出。通过多源数据整合、动态数据透视及可视化准备,结合性能优化与最佳实践,助你构建响应快速、数据精准的商业级数据仪表板。适合希望提升数据分析能力的开发者。
57 31
|
6天前
|
数据采集 数据安全/隐私保护 Python
从零开始:用Python爬取网站的汽车品牌和价格数据
在现代化办公室中,工程师小李和产品经理小张讨论如何获取懂车帝网站的汽车品牌和价格数据。小李提出使用Python编写爬虫,并通过亿牛云爬虫代理避免被封禁。代码实现包括设置代理、请求头、解析网页内容、多线程爬取等步骤,确保高效且稳定地抓取数据。小张表示理解并准备按照指导操作。
从零开始:用Python爬取网站的汽车品牌和价格数据
|
22天前
|
IDE 测试技术 项目管理
【新手必看】PyCharm2025 免费下载安装配置教程+Python环境搭建、图文并茂全副武装学起来才嗖嗖的快,绝对最详细!
PyCharm是由JetBrains开发的Python集成开发环境(IDE),专为Python开发者设计,支持Web开发、调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试和版本控制等功能。它有专业版、教育版和社区版三个版本,其中社区版免费且适合个人和小型团队使用,包含基本的Python开发功能。安装PyCharm前需先安装Python解释器,并配置环境变量。通过简单的步骤即可在PyCharm中创建并运行Python项目,如输出“Hello World”。
197 13
【新手必看】PyCharm2025 免费下载安装配置教程+Python环境搭建、图文并茂全副武装学起来才嗖嗖的快,绝对最详细!
|
1天前
|
算法 Serverless 数据处理
从集思录可转债数据探秘:Python与C++实现的移动平均算法应用
本文探讨了如何利用移动平均算法分析集思录提供的可转债数据,帮助投资者把握价格趋势。通过Python和C++两种编程语言实现简单移动平均(SMA),展示了数据处理的具体方法。Python代码借助`pandas`库轻松计算5日SMA,而C++代码则通过高效的数据处理展示了SMA的计算过程。集思录平台提供了详尽且及时的可转债数据,助力投资者结合算法与社区讨论,做出更明智的投资决策。掌握这些工具和技术,有助于在复杂多变的金融市场中挖掘更多价值。
22 12
|
5天前
|
数据采集 并行计算 数据可视化
Pandas高级数据处理:数据报告生成实战指南
数据报告生成面临数据质量、计算性能、呈现形式和自动化等核心挑战。常见问题包括缺失值导致统计失真、内存溢出及可视化困难。解决方案涵盖数据清洗、分块处理、安全绘图模板等。通过模块化设计、异常处理机制和性能优化策略,如使用`category`类型、并行计算等,可大幅提升效率。最佳实践建议建立数据质量检查清单、版本控制和自动化测试框架,确保系统具备自适应能力,提升报告生成效率300%以上。
38 12
|
1天前
|
Python
python pandas学习(一)
该代码段展示了四个主要操作:1) 删除指定列名,如商品id;2) 使用正则表达式模糊匹配并删除列,例如匹配订单商品名称1的列;3) 将毫秒级时间戳转换为带有时区调整的日期时间格式,并增加8小时以适应本地时区;4) 将列表转换为DataFrame后保存为Excel文件,文件路径和名称根据变量拼接而成。
12 3
|
29天前
|
数据采集 供应链 数据可视化
Pandas数据应用:供应链优化
在当今全球化的商业环境中,供应链管理日益复杂。Pandas作为Python的强大数据分析库,能有效处理库存、物流和生产计划中的大量数据。本文介绍如何用Pandas优化供应链,涵盖数据导入、清洗、类型转换、分析与可视化,并探讨常见问题及解决方案,帮助读者在供应链项目中更加得心应手。
50 21

推荐镜像

更多