相关文章推荐
侠义非凡的脆皮肠  ·  查看论文信息·  10 月前    · 
有胆有识的砖头  ·  在Anaconda环境中安装textblob ...·  1 年前    · 
温柔的桔子  ·  Python百年老照片修复算法,致敬那些高颜 ...·  1 年前    · 
从容的绿豆  ·  薛朝辉简介·  1 年前    · 
大力的馒头  ·  DB2数据库_db2查询所有表-腾讯云开发者 ...·  1 年前    · 
Code  ›  Pandas数据处理1、DataFrame删除NaN空值(dropna各种属性值控制超全)开发者社区
pandas dataframe 数据处理 axis
https://cloud.tencent.com/developer/article/2218571
坚强的机器猫
1 年前
红目香薰

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

前往小程序,Get 更优 阅读体验!
立即前往
腾讯云
开发者社区
文档 建议反馈 控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
红目香薰
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
社区首页 > 专栏 > Pandas数据处理1、DataFrame删除NaN空值(dropna各种属性值控制超全)

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

作者头像
红目香薰
发布 于 2023-02-17 09:58:26
3.7K 0
发布 于 2023-02-17 09:58:26
举报
文章被收录于专栏: CSDNToQQCode CSDNToQQCode

Pandas数据处理——渐进式学习


目录

Pandas数据处理——渐进式学习

前言

环境

DataFrame删除NaN空值

dropna函数参数

测试数据

删除所有有空的行

axis属性值

how属性值

thres属性值

subset属性值

inplace是否复制副本

fillna测试

总结


前言

这个女娃娃是否有一种初恋的感觉呢,但是她很明显不是一个真正意义存在的图片,我们需要很复杂的推算以及各种炼丹模型生成的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来删除这帮空值。

代码语言: javascript
复制
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则创建新副本

测试数据

代码语言: javascript
复制
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的值代表列。

代码语言: javascript
复制
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属性值

代码语言: javascript
复制
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属性值

代码语言: javascript
复制
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的值就会删除行

代码语言: javascript
复制
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,不复制副本,我们不二次赋值。

代码语言: javascript
复制
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)

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

不复制副本

代码语言: javascript
复制
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测试

代码语言: javascript
复制
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

代码语言: javascript
复制
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----")
# 有空的都删掉
 
推荐文章
侠义非凡的脆皮肠  ·  查看论文信息
10 月前
有胆有识的砖头  ·  在Anaconda环境中安装textblob.download_corpora时出错。
1 年前
温柔的桔子  ·  Python百年老照片修复算法,致敬那些高颜值的父母! - 知乎
1 年前
从容的绿豆  ·  薛朝辉简介
1 年前
大力的馒头  ·  DB2数据库_db2查询所有表-腾讯云开发者社区-腾讯云
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号