Pandas数据处理1、DataFrame删除NaN空值(dropna各种属性值控制超全)

简介: Pandas数据处理1、DataFrame删除NaN空值(dropna各种属性值控制超全)



前言

       这个女娃娃是否有一种初恋的感觉呢,但是她很明显不是一个真正意义存在的图片,我们需要很复杂的推算以及各种炼丹模型生成的AI图片,我自己认为难度系数很高,我仅仅用了64个文字形容词就生成了她,很有初恋的感觉,符合审美观,对于计算机来说她是一组数字,可是这个数字是怎么推断出来的就是很复杂了,我们在模型训练中可以看到基本上到处都存在着Pandas处理,在最基础的OpenCV中也会有很多的Pandas处理,所以我OpenCV写到一般就开始写这个专栏了,因为我发现没有Pandas处理基本上想好好的操作图片数组真的是相当的麻烦,可以在很多AI大佬的文章中发现都有这个Pandas文章,每个人的写法都不同,但是都是适合自己理解的方案,我是用于教学的,故而我相信我的文章更适合新晋的程序员们学习,期望能节约大家的事件从而更好的将精力放到真正去实现某种功能上去。本专栏会更很多,只要我测试出新的用法就会添加,持续更新迭代,可以当做【Pandas字典】来使用,期待您的三连支持与帮助。


环境

系统环境:win11

Python版本:python3.9

编译工具:PyCharm Community Edition 2022.3.1

Numpy版本:1.19.5

Pandas版本:1.4.4


DataFrame删除NaN空值

在数据操作的时候我们经常会见到NaN空值的情况,很耽误我们的数据清理,那我们使用dropna函数删除DataFrame中的空值。

实际上能处理的有3个函数,我们用dropna来删除这帮空值。

DataFrame.dropna([axis, how, thresh, …])      #返回对象与给定的轴上的标签省略或者任何地方
DataFrame.fillna([value, method, axis, …])    #填充空值
DataFrame.replace([to_replace, value, …])     #值在“to_replace”替换为“value”。

dropna函数参数

axis:操作的轴向,X/Y

how:两个参数any与all,all代表整个行都是空才会删除

thresh:某行的空值超过这个阈值才会删除

subset:处理空值时,只考虑给定的列。需要提供列名数组

inplace:值是True和False,True是在原DataFrame上修改,False则创建新副本

测试数据

import pandas as pd
import numpy as np
df = pd.DataFrame(
    {'name': ['张丽华', '李诗诗', '王语嫣', '赵飞燕', '阮玲玉'],
     'sex': ['girl', 'woman', np.nan, 'girl', 'woman'],
     'age': [22, np.nan, 16, np.nan, 27]
     }
)
print(df)

可以看到有好多空值:

删除所有有空的行

axis属性值

这里的dropna只填写了【axis】一个参数,其中0的值代表行,1的值代表列。

import pandas as pd
import numpy as np
df = pd.DataFrame(
    {'name': ['张丽华', '李诗诗', '王语嫣', '赵飞燕', '阮玲玉'],
     'sex': ['girl', 'woman', np.nan, 'girl', 'woman'],
     'age': [22, np.nan, 16, np.nan, 27]
     }
)
print(df)
print("----axis=0----")
# 删除所有有空的行
df = df.dropna(axis=0)
print(df)

axis=0效果测试:

axis=1效果测试:

很明显我们能看的出来,只要是axis=0有空的行就删除了,axis=1有空的列就删除了。

how属性值

import pandas as pd
import numpy as np
df = pd.DataFrame(
    {'name': ['张丽华', '李诗诗', '王语嫣', '赵飞燕', '阮玲玉'],
     'sex': ['girl', 'woman', np.nan, 'girl', 'woman'],
     'age': [22, np.nan, 16, np.nan, 27]
     }
)
print(df)
print("----how='any'----")
# any有空行就删除·all必须都是空行才能删除
df = df.dropna(how='any')
print(df)

any效果:

all效果:由于没有都是NaN的行,故而都没有删除。

thres属性值

import pandas as pd
import numpy as np
df = pd.DataFrame(
    {'name': ['张丽华', '李诗诗', '王语嫣', '赵飞燕', '阮玲玉'],
     'sex': ['girl', 'woman', np.nan, 'girl', 'woman'],
     'age': [22, np.nan,  np.nan, np.nan, 27]
     }
)
print(df)
print("----thresh=2----")
# 有空的都删掉
df = df.dropna(thresh=2)
print(df)

有2个nan就会删除行

subset属性值

我这里清除的是[name,age]两列只要有NaN的值就会删除行

import pandas as pd
import numpy as np
df = pd.DataFrame(
    {'name': ['张丽华', '李诗诗', '王语嫣', '赵飞燕', '阮玲玉'],
     'sex': ['girl', 'woman', np.nan, 'girl', 'woman'],
     'age': [22, np.nan, 16, np.nan, 27]
     }
)
print(df)
print("----subset----")
# subset传的参数是列名的数组
df = df.dropna(subset=['name', 'age'])
print(df)

实际效果:

inplace是否复制副本

inplace=False,不复制副本,我们不二次赋值。

import pandas as pd
import numpy as np
df = pd.DataFrame(
    {'name': ['张丽华', '李诗诗', '王语嫣', '赵飞燕', '阮玲玉'],
     'sex': ['girl', 'woman', np.nan, 'girl', 'woman'],
     'age': [22, np.nan, 16, np.nan, 27]
     }
)
print(df)
print("----subset----")
# subset传的参数是列名的数组
df.dropna(subset=['name', 'age'], inplace=False)
print(df)

复制副本,但是未重新赋值效果

不复制副本

import pandas as pd
import numpy as np
df = pd.DataFrame(
    {'name': ['张丽华', '李诗诗', '王语嫣', '赵飞燕', '阮玲玉'],
     'sex': ['girl', 'woman', np.nan, 'girl', 'woman'],
     'age': [22, np.nan, 16, np.nan, 27]
     }
)
print(df)
print("----subset----")
# subset传的参数是列名的数组
df.dropna(subset=['name', 'age'], inplace=True)
print(df)

可以很直接的看到效果。

fillna测试

pandas.DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)

value:用于填充的空值的值。

method: {'backfill', 'bfill', 'pad', 'ffill', None}, default None。定义了填充空值的方法,

               pad / ffill表示用前面行/列的值,填充当前行/列的空值,

               backfill / bfill表示用后面行/列的值,填充当前行/列的空值。

axis:轴。0或'index',表示按行删除;1或'columns',表示按列删除。

inplace:是否原地替换。布尔值,默认为False。如果为True,则在原DataFrame上进行操   作,返回值为None。

limit:int,default None。如果method被指定,对于连续的空值,这段连续区域,最多填充前,limit 个空值(如果存在多段连续区域,每段最多填充前 limit 个空值)。如果method未被指定, 在该axis下,最多填充前 limit 个空值(不论空值连续区间是否间断)

downcast:dict, default is None,字典中的项为,为类型向下转换规则。

示例代码:替换成10

import pandas as pd
import numpy as np
df = pd.DataFrame(
    {'name': ['张丽华', '李诗诗', '王语嫣', '赵飞燕', '阮玲玉'],
     'sex': ['girl', 'woman', np.nan, 'girl', 'woman'],
     'age': [22, np.nan, np.nan, np.nan, 27]
     }
)
print(df)
print("----fillna----")
# 有空的都删掉
df2 = df.fillna(10,
                method=None,
                axis=1,  # axis=0或"index":沿着行的向(纵向); axis=1或"column":是沿着列的方向(横向)
                limit=2,  # 在没指定method的情况下,沿着axis指定方向上填充的个数不大于limit设定值
                inplace=False)  # 返回新的DataFrame
print("用10替换后的df2 = \n", df2)

实际效果:

总结

我们很多的时候在处理SQL的时候需要去掉空值,其实和这个操作是一样的,空值是很多的时候没有太大意义,数据清洗的时候就会用到这块了。

相关文章
|
2月前
|
并行计算 数据处理 API
再见 Pandas,又一数据处理神器!
再见 Pandas,又一数据处理神器!
|
2月前
|
存储 数据采集 数据处理
深入探索Pandas的DataFrame:基本用法与案例研究
深入探索Pandas的DataFrame:基本用法与案例研究
|
1月前
|
BI 数据处理 索引
Pandas基本操作:Series和DataFrame(Python)
Pandas基本操作:Series和DataFrame(Python)
108 1
|
2月前
|
并行计算 数据处理 API
再见Pandas,又一数据处理神器!
再见Pandas,又一数据处理神器!
|
16天前
|
数据采集 数据挖掘 大数据
数据处理利器:使用Pandas进行数据清洗与转换
【4月更文挑战第12天】在大数据时代,Pandas是Python数据分析的关键工具,提供高效的数据清洗和转换功能。本文介绍了如何使用Pandas处理缺失值(删除或填充)、异常值(Z-Score法和IQR法)以及重复值(检测和删除)。此外,还涵盖了数据转换,包括数据类型转换、数据标准化(Min-Max和Z-Score)以及类别数据的one-hot编码。通过学习这些方法,可以为数据分析和挖掘奠定坚实基础。
|
9天前
|
数据采集 机器学习/深度学习 自然语言处理
《Pandas 简易速速上手小册》第7章:Pandas 文本和类别数据处理(2024 最新版)
《Pandas 简易速速上手小册》第7章:Pandas 文本和类别数据处理(2024 最新版)
26 1
|
12天前
|
数据处理 索引 Python
Pandas常见问题与解决方案:避开数据处理中的坑
【4月更文挑战第16天】本文总结了Pandas数据处理中的常见问题及解决方案:1) 数据类型不匹配,使用`astype`转换;2) 缺失值处理,用`dropna`删除或`fillna`填充;3) 内存占用过大,通过选择性加载列、指定`dtype`和使用`chunksize`分块处理;4) 合并数据问题,确保键匹配和正确合并方式;5) 排序和分组聚合错误,使用`sort_values`/`sort_index`和`groupby`配合聚合函数。掌握这些技巧可提高数据处理效率。
|
12天前
|
SQL 机器学习/深度学习 数据可视化
Pandas与其他库的集成:构建强大的数据处理生态
【4月更文挑战第16天】Pandas在数据处理中扮演关键角色,但与其他Python库如NumPy、Matplotlib/Seaborn、Scikit-learn和SQL的集成使其功能更加强大。结合NumPy进行数值计算,搭配Matplotlib/Seaborn实现高效可视化,与Scikit-learn联用加速机器学习,以及与SQL集成便于数据库操作,这些都构建了一个全面的数据处理生态系统,提升了数据科学家的工作效率,助力于数据价值的发掘。
|
12天前
|
存储 数据挖掘 数据处理
Pandas数据结构详解:Series与DataFrame的奥秘
【4月更文挑战第16天】Pandas的Series和DataFrame是数据处理的核心工具。Series是一维标签化数组,支持各种数据类型,可通过索引便捷访问。DataFrame是二维表格型数据结构,适合存储和操作表格数据。两者提供丰富的统计方法和操作,如筛选、排序、分组聚合。它们之间可相互转换和交互,助力高效的数据分析。理解和掌握Series和DataFrame对于数据科学至关重要。
|
1月前
|
数据采集 自然语言处理 数据可视化
使用Pandas库对淘宝原始数据进行数据处理和分词处理
使用Pandas库对淘宝原始数据进行数据处理和分词处理
30 0