pandas处理重复值、缺失值、异常值

news/2025/3/18 15:39:34/文章来源:https://www.cnblogs.com/Mcoming/p/18779062

一、drop_duplicates() 去重

# 语法:
drop_duplicates(subset=None, keep=‘first’, inplace=False, ignore_index=False)参数:
subset: 设置根据列的子集来判断重复值,默认根据DataFrame的所有列来判断重复值,即所有列的数据都相同时,才算重复值。如果指定了子集,则只要子集的这些列的数据都相同,就算重复值。
keep: 设置保留重复值中的哪一个,可以设置的值有{‘first’, ‘last’, False},默认first,如果有重复值,则保留第一个。设置为last,则保留重复值中的最后一个。设置为False,则删除所有的重复值,一个也不保留。
inplace: 作用同drop(),值为True时,直接修改原数据,不返回
ignore_index: 设置是否忽略行索引,默认False,去重后的结果的行索引保持原索引不变。如果设置为True,则结果的行索引被重置为0开始的自然数。# 示例:
df3 = pd.DataFrame({'A': ['a0', 'a1', 'a1', 'a2', 'a2'],'B': ['b0', 'b1', 'b1', 'b2', 'b2'],'C': ['c0', 'c1', 'c1', 'c2', 'c3']},index=['one', 'two', 'three', 'four', 'five']
)print(df3)
print('-'*20, '\n', df3.drop_duplicates(), sep='')  # 对比所有行,行与行内的所有列的值都相同则执行去重,默认保留第一行。two和three相同,所以删除了three这行
print('-'*20, '\n', df3.drop_duplicates(subset=['A', 'B']), sep='')  # 同时对比所有行A,B两列的值,行内的A、B列的值都相同则执行去重,默认保留第一行。two、three相同,four、five相同,所以删除了three 和 five两行。subset='A' ,就是按照A列的值去重
print('-'*20, '\n', df3.drop_duplicates(keep='last'), sep='')  # 对比所有行,行与行内的所有列的值都相同则执行去重,保留最后一行。two和three相同,所以删除了four 这行
print('-'*20, '\n', df3.drop_duplicates(keep=False), sep='')  # # 对比所有行,行与行内的所有列的值都相同则执行去重,不保留。two和three相同,所以删除了two和three两行
print('-'*20, '\n', df3.drop_duplicates(ignore_index=True), sep='')  # ignore_index 设置为True,结果的行索引被重置为0开始的自然数"""A   B   C
one    a0  b0  c0
two    a1  b1  c1
three  a1  b1  c1
four   a2  b2  c2
five   a2  b2  c3
--------------------A   B   C
one   a0  b0  c0
two   a1  b1  c1
four  a2  b2  c2
five  a2  b2  c3
--------------------A   B   C
one   a0  b0  c0
two   a1  b1  c1
four  a2  b2  c2
--------------------A   B   C
one    a0  b0  c0
three  a1  b1  c1
four   a2  b2  c2
five   a2  b2  c3
--------------------A   B   C
one   a0  b0  c0
four  a2  b2  c2
five  a2  b2  c3
--------------------A   B   C
0  a0  b0  c0
1  a1  b1  c1
2  a2  b2  c2
3  a2  b2  c3
"""

二、缺失值处理

  • 如果缺失值没有使用NaN标记,比如使用"?",则可以先用 data = data.replace(to_replace='?',value=np.nan)替换'?’ 为 np.nan,然后继续处理
  • 检测所有内容是否不存在nan,可以用np.all(df.notnull())判断,结果为True,则没有缺失值
1. 判断函数:
df.isnull().any(axis)  # 常用, 尽可能找到所有的空值。同 pd.isnull(df)
df.notnull().all(axis)  # 常用,尽可能找到所有的空值。同 pd.notnull(df)获取缺失值的标记方式(NaN或者其他标记方式)如果缺失值的标记方式是NaN判断数据中是否包含NaN:df.isnull(),df.notnull()2. 过滤函数df.dropna()  # 默认是删除有空的行df.dropna(axis=1)  # 删除有空的列df.dropna(how='any')  # 默认值,默认有空就会删除,注:不会修改原数据,需要接收返回值df.dropna(how='all', axis=1)  # 所有的值都为空(整行或整列为空),才删除df.dropna(inplace=True)  # inplace=True: 表示修改原数据3. 填充函数 Series/DataFramedf.fillna(value=100,inplace=True)  # 填充df.fillna(value=100, limit=1, inplace=True)# limit: 限制对应维度上填充的次数df.fillna(method='ffill')  # 用上面数据来填充自己df.fillna(method='bfill')  # 用下面数据来填充自己df.fillna(method='ffill', axis=1)  # 用左边数据来填充自己df.fillna(method='bfill', axis=1)  # 用右边数据来填充自己

二、映射

1) replace()函数:替换元素
2) map()函数: 适合处理某一单独的列
3) rename()函数:替换索引
4) apply()函数:既支持 Series,也支持 DataFrame,用于接收一个自定义函数,来处理数据# 如:定义一个对yuwen 和lishi两列,求各自最大值-最小值的函数
d = df[['yuwen','lishi']].apply(lambda x:x.max()- x.min(),axis=0)  # df[['yuwen','lishi']]是df对象的一种取值方式,先列后行规则5) transform()函数

三、异常值的检测和过滤

describe(): 查看每一列的描述性统计量df.std() : 可以求得DataFrame对象每一列的标准差df.drop(): 删除特定索引unique() : 唯一,去重query() : 按条件查询df.sort_values(): 根据值排序df.sort_index(): 根据索引排序df.info(): 查看数据信息

四、抽样

  • 使用.take()函数排序
  • 可以借助np.random.permutation()函数随机排序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/900970.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20222223 实验一《Python程序设计》实验报告

20222223 2024-2025-2 《Python程序设计》实验一报告课程:《Python程序设计》 班级: 2222 姓名: 李東霖 学号: 20222223 实验教师:王志强 实验日期:2025年3月12日 必修/选修: 公选课一、实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能;(编写书中的程序…

交换节点 - 环

树上交换节点给定一棵树,每个节点有一个权值。现在每次可以交换任意两个节点的权值,请问最少多少次交换可以使得每个节点的权值等于它的编号? 保证给出的权值是一个排列,也就是说保证一定有解。时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M输入描…

Arduino雷达使用Android移动应用程序

该系统可以检测障碍物并收集距离和角度信息,并且可以通过移动应用程序通过蓝牙进行控制。 Arduino雷达使用Android移动应用程序本项目是一个由超声波传感器和伺服电机驱动的雷达系统。该系统可以检测障碍物并收集距离和角度信息,并且可以通过移动应用程序通过蓝牙进行控制。该…

使用cursor打造智能客服demo

cursor AI它真的是非常强大。 今天讲下如何使用它,搭配deepseek api接口,来生成一个智能客服系统。这是最终的效果。首先cursor需要登录后才能使用。登录之后有两周的免费试用期。我们在窗口的右侧填写智能客服的需求。帮我实现一个网页智能客服。详细要求如下: 1.生成一个h…

【蓝牙小程序】小程序使用echart图表报错:setOption of undefined

转载自:https://developers.weixin.qq.com/community/develop/doc/0004ac054ccec0f26df7baa8756800问题:小程序使用echart图表报错 Cannot read property setOption of undefined;at api request success callback function TypeError: Cannot read property setOption of un…

前端中的Javascript

前端中的Javascript javascript定义方式内联JavaScript直接在HTML元素的事件属性中编写JavaScript代码<body><h1>Hello, World!</h1><button onclick="alert(Button clicked!)">Click Me</button> </body>内部JavaScript可以直接…

NVM:安装配置使用

一、简介 在实际的开发和学习中可能会遇到不同项目的 node 版本不同,而出现的兼容性问题。 而 nvm 就可以很好的解决这个问题,它可以在同一台机器上下管理多个 node 版本,使得程序员可以轻松地安装、卸载和切换不同的 node 版本。 在下载和配置 nvm 前,需要在控制面板中先删…

硬盘科普,M.2,PCI-E,NVMe 傻傻分不清

首先从三个层面去理解这个问题:物理接口,通道,协议 1:物理接口(相当于通讯中的电,光口) 大白话- 物理规格,像是 公路,铁路 专门跑PCI-E通道的那个物理接口:扩展性极强,可以插显卡的PCI-E X16的那个物理接口,或者插网卡,声卡的那个PCI-E X1那个物理接口,都是属于一类…

第二届长城杯ciscn半决赛awdp pwn以及应急响应wp

这次半决赛还真是状况频出,先是上午全场靶机断联了2轮,下午的应急又在坐大牢,还好是后面捋顺了逻辑做出来了,下半场干了个赛区第二,总成绩第四,这回是真燃尽了 上半场AWDP typo fix 一开始一直在改这道结果后面才发现那个prompt是真的好改,白浪费了3轮。。。 进入程序是…

LLM Assistance for Memory Safety

LLM Assistance for Memory SafetyMohammed, Nausheen, et al. "LLM Assistance for Memory Safety." 2025 IEEE/ACM 47th International Conference on Software Engineering (ICSE). IEEE Computer Society, 2024.Introduction 在软件安全的漏洞中,内存安全是主要…

『Plotly实战指南』--折线图绘制进阶篇

上一篇介绍了Plotly绘制折线图的基础知识和数据预处理的技巧, 本文将重点探讨如何利用Plotly实现多线折线图的布局设计以及动态折线图的实现, 让我们一起掌握进阶的折线图绘制技巧。 1. 多折线图布局 在实际的数据分析场景中,常常需要同时展示多组数据,例如对比不同产品的销…

使用gradio快速实现聊天机器人

我们可以使用gradio库通过低代码的方式快速实现聊天机器人界面及交互: import gradio as gr from ollama import chatdef predict(message,history):stream = chat(model="deepseek-r1:1.5b",messages=[{"role":"user","content":mess…