pandas---删除重复行、映射、异常值检测与过滤、抽样

news2024/11/24 17:27:01

1. 删除重复行

使用duplicated()函数检测重复的行。

返回布尔类型的Series对象,每个元素对应一行,如果该行不是第一次出现,则元素为True。

def make_df(indexs, columns):    
    data = [[str(j)+str(i) for j in columns] for i in indexs]
    df = pd.DataFrame(data=data, index=indexs, columns=columns)
    return df
df = make_df([1, 2, 3, 4], list('ABCD'))
df

# 让第一行和第二行重复
df.loc[1] = df.loc[2]
df

# 判断是否和前面的行重复了
df.duplicated()
df.duplicated(keep='first')  # 保留第一行
df.duplicated(keep='last')  # 保留最后一行
df.duplicated(keep=False)  # 标记所有重复行,不保留任何一行

df.loc[1, 'D'] = 'DDD'
df

# subset: 子集
df.duplicated(subset=['A','B','C'])

 

 使用drop_duplicates()函数删除重复的行:

print(df.drop_duplicates())
df.drop_duplicates(subset=['A', 'B', 'C'])
df.drop_duplicates(subset=['A', 'B', 'C'], keep='last')

 

2. 映射

映射的含义:创建一个映射关系列表,把values元素和一个特定的标签或者字符串绑定。

replace()函数:替换元素

index = ['张三', '张三丰', '李白', '杜甫']
columns = ['Python', 'Java', 'H5', "UI"]
data = np.random.randint(0, 100, size=(4, 4))
df = pd.DataFrame(data=data, index=index, columns=columns)
df

# 替换元素
df.replace({5: 50, 1: 100})

map()函数:新建一列,map()函数中可以使用lambda函数,适合处理某一单独的列

df2 = df.copy()
df2

# map一般用在Series数据结构,不能用于DataFrame
# df2['Python'].map({16: 160, 12: 120, 17: 170, 60:600})
# 将Python的每个人的成绩乘以10
df2['Python'].map(lambda x : x * 10)
# 新增一列
df2['Pandas'] = df2['Python'].map(lambda x : x * 10)
df2

 

# 新增一列:判断Java的成绩是否及格
df2['Java是否及格'] = df2['Java'].map(lambda n: '及格'  if n>=60 else '不及格')
df2

# 使用普通函数
# 新增一列: 判断UI成绩
#  <60  不及格
#  60<=n <80 及格
#  >=80 优秀
def fn(n):
    if n < 60:
        return '不及格'
    elif n < 80:
        return '及格'
    return '优秀'
df2['UI等级'] = df2['UI'].map(fn)
df2

 

rename()函数:替换索引。

df3.rename({'张三': 'Mr Zhang'})  # 默认修改行索引名
df3.rename({'Python': '派森'}, axis=1)  # 修改列索引名
df3.rename(index={'张三': 'Mr Zhang'}) # 修改行索引名
df3.rename(columns={'Python': '派森'}) # 修改列索引名

# 重置索引
df3.reset_index()

# 设置行索引
df3.set_index(keys=['H5'])

apply()函数:既支持 Series,也支持 DataFrame

df = pd.DataFrame(data=np.random.randint(0, 10, size=(5, 3)),
                              index=list('ABCDE'),
                              columns=['Python', 'NumPy', 'Pandas']
                 )
df
# 用于Series, 其中x表式的Series中元素
df['Python'].apply(lambda x:  True if x>5 else False)
# 用于DataFrame, 其中x是DataFrame中某列或某行的Series数据
df.apply(lambda x : x.mean(), axis=0)  # 求每一列数据的平均值
df.apply(lambda x : x.mean(), axis=1)  # 求每一行数据的平均值

 

# 自定义方法
def fn2(x):
    return  (np.round(x.mean(), 1), x.count())  # 平均值,计数
df.apply(fn2, axis=1)

# applymap: DataFrame专有的方法,其中的x是每个元素
df.applymap(lambda x : x + 100) 

 

transform()函数

df = pd.DataFrame(data=np.random.randint(0, 10, size=(5, 3)),
                              index=list('ABCDE'),
                              columns=['Python', 'NumPy', 'Pandas']
                 )
df
# Series中使用transform
# 可以执行多项计算
df['Python'].transform([np.sqrt, np.exp])

# DataFrame中使用transform
def convert(x):
    if x.mean() > 5:
        return x * 10
    return x * (-10)   
df.transform(convert)  # 处理每一列
df.transform(convert, axis=1)  # 处理每一行

 

3. 异常值检测和过滤 

describe():查看每一列的描述性统计量

df.std():可以求得DataFrame对象每一列的标准差

df.drop():删除特定索引

unique():唯一,去重,DataFrame没有unique,Series调用unique。

df.query:按条件查询

df2.drop('A')  # 默认删除行
df2.drop('Python', axis=1)  # 删除列
df2.drop(index='A')  # 删除行
df2.drop(columns='Python')  # 删除列
# 删除多列或多行
df2.drop(columns=['NumPy', 'Python'])
df2.drop(index=['A', 'B'], inplace=True)

df['Python'].unique()
# ==, >, <
# and, &
#  or , | 
# in 
df.query('Python == 9')  # 找到Python列中等于9的所有行
df.query('Python < 8') 
df.query('Python>6 and NumPy==2')
df.query('Python>6 & NumPy==2')
df.query('Python==3 or NumPy==2')
df.query('Python==3 | NumPy==2')
df.query('Python in [3, 4, 5, 6]')  # 成员运算符
# 使用变量
n = 7
df.query('Python == @n')  # @n 表式使用变量n的值
m =  [3, 4, 5, 6]
df.query('Python in @m')  # 成员运算符

df.sort_values(): 根据值排序;

df.sort_index(): 根据索引排序。

#  sort_values : 默认按照列名排序,默认升序  (常用)
df.sort_values('Python')  
# ascending: 是否升序,默认是True
df.sort_values('Python', ascending=False)  # 降序

# 根据行索引名排序,会把列进行排序(不常用)
df.sort_values('B', axis=1)
# 按照索引名排序 (不常用)
# 默认是对行索引进行排序,默认是升序
df.sort_index(ascending=False)
# 按照列索引排序
df.sort_index(ascending=False, axis=1)

df.info(): 查看数据信息

df.info()

4. 抽样 

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

df2.take([1, 0, 2])  # 行排列
df2.take([1, 0, 2], axis=1)  # 列排列

# 随机排列
np.random.permutation([0, 1, 2])

# 无放回抽样: 依次随机取出,没有重复值
df2.take(np.random.permutation([0, 1, 2]))

 

# 有放回抽样: 可能会出现重复值

np.random.randint(0, 3, size=5)

df2.take(np.random.randint(0, 3, size=5))

 

 

 

 

 

 

 

 

 

 

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中国人民大学与加拿大女王大学金融硕士——用更长远的眼光,展望未来

职场中遇到瓶颈&#xff0c;大家都迫切希望改变自己所处的环境&#xff0c;但却不愿意改变自己&#xff0c;所以他们自己仍然是被束缚的。如果一个人不能够从自我拷问的状态中解脱出来&#xff0c;他就永远也不可能实现自己心中的目标。我们要用更长远的眼光去展望未来&#xf…

NAVIGATE 领航者峰会:记忆科技携手新华三,以存储创新释放数据价值

近日&#xff0c;由紫光集团和新华三集团主办的2023 NAVIGATE 领航者峰会在杭州举行。本届峰会的主题为“精耕务实&#xff0c;为时代赋智慧”&#xff0c;围绕该主题&#xff0c;国内外数千名技术领导者汇聚一堂&#xff0c;探讨数字经济的创新未来。作为IT硬件领域的重要厂商…

vue + g6 实现树级结构(compactBox 紧凑树)

G6文档 自定义节点 G6.registerNode("dom-node",{draw: (cfg, group) > {let str <div classitem-box catalog-node ${cfg.isSelected ? "is-selected" : ""} ${cfg.status}-box οnclickhandleDetail("${cfg.id}") id&quo…

JMeter压测如何分配业务比例?

在进行综合场景压测时&#xff0c;由于不同的请求&#xff0c;要求所占比例不同&#xff0c;那如何实现呢&#xff1f; 有人说将这些请求分别放到单独的线程组下&#xff0c;然后将线程组的线程数按照比例进行配置&#xff0c;这种方法不是很好&#xff0c;想想&#xff0c;不…

5G是如何提升通行能力的?5G毫米波到底有多快?

高速公路&#xff0c;可以通过多层交通、多条车道、车道方向、车辆容量、货物包装、驾驶司机等多个因素&#xff0c;提升通行能力。 我们把5G比作高速公路&#xff0c;那么&#xff0c;5G是如何提升自身通行能力的呢&#xff1f;5G毫米波&#xff0c;到底能有多快呢&#xff1f…

跨越时空的教育:在线培训系统的全球化

随着全球化的发展&#xff0c;跨越时空的教育已经成为现实。在线培训系统可以打破地域限制&#xff0c;让学生能够接受来自世界各地的教育资源。这种新型教育模式具有巨大的潜力和优势。 在线培训系统是指通过互联网提供的远程教育服务。它可以通过网络平台、视频教育、虚拟课…

如何优雅地使用Low Code提高开发效率

2023年&#xff0c;低代码热度有&#xff0c;但是在企业内部核心场景的落地比例不高&#xff0c;推进进展也没有想象中快。就算是这样&#xff0c;低代码赛道也在“暗流涌动”。 数字化趋势下&#xff0c;很多企业想要以数字化的手段进行降本增效。很多企业希望以低代码的模式…

【Turfjs的java版本JTS】前面讲了Turfjs可以实现几何计算,空间计算的功能,如果后端要做这项功能也有类似的类库,JTS

JTS Java Topology Suite 几何计算&#xff1a; 1. 前端js就用这个 Turfjs的类库。参考网站&#xff1a; 计算两线段相交点 | Turf.js中文网 2. 后端java语言就可以用 JTS这个类库&#xff0c;参考网站&#xff1a; JTS参考网站&#xff1a; 1. https://github.com/locatio…

【机器学习】神经网络代价函数和反向传播算法

神经网络的代价函数 接下来我会再规定若干符号代表的含义&#xff1a; L L L表示神经网络的总层数 s i s_i si​表示的是第i层的神经元数量 如果神经网络处理的是一个二元分类问题&#xff0c;那么他的第L层就只会有一个节点&#xff1b;如果处理的是一个多元分类问题&…

不知不觉创作一年了,谈谈我的创作经历

前言 大家好&#xff0c;我是小刘在C站&#xff0c;不知不觉创作1年啦&#xff0c;本次文章呢分享一下我这一路走来的经历吧 目录 前言 1.为什么写博客 2.第一篇文章 3.怎么坚持创作的&#xff1f; 4.自我介绍 5.收获 6.认识了哪些大佬呢&#xff1f; 7.未来规划 8.分…

【C++】STL的string容器介绍

目录 1、string容器 1.1声明一个c字符串 1.2string和c字符数组的比较 1.3string类操作函数介绍 1.3.1赋值操作 1.3.2字符串拼接 1.3.3字符串查找 1.3.4字符串替换 1.3.5字符串比较 1.3.6字符存取 1.3.7字符串插入 1.3.8字符串删除 1.3.9子串获取 1、string容器 在…

测试4年外包已上岸 , 我只能说这类公司能不去尽量别去···

我大学学的是计算机专业&#xff0c;毕业的时候&#xff0c;对于找工作比较迷茫&#xff0c;也不知道当时怎么想的&#xff0c;一头就扎进了一家外包公司&#xff0c;一干就是4年。现在终于跳槽到了互联网公司了&#xff0c;我想说的是&#xff0c;但凡有点机会&#xff0c;千万…

从零开始Vue项目中使用MapboxGL开发三维地图教程(五)实现框选要素功能、可拖动点展示坐标以及地图上实时更新要素

文章目录 1、实现框选要素功能1.1、添加点数据的图层&#xff1a;1.2、增加绘图插件&#xff08;mapbox-draw&#xff09;1.3、实现框选并让选择的目标数据高亮 2、实现地图上可拖动点2.1、实现功能&#xff1a;2.2、实现思路&#xff1a;2.3、代码示例&#xff1a; 3、实时更新…

已安装过PageOfiice,谷歌浏览器反复提示PageOffice安装

原因&#xff1a;Chrome开发团队以网络安全为由&#xff0c;强推ssl证书&#xff0c;希望所有部署在公网的网站&#xff0c;全部改用https访问&#xff0c;所以最新的谷歌和edge升级到94版本后对公网上的http请求下的非同域的http请求进行了拦截&#xff0c;于是就出现了目前遇…

火灾发生时如何实时地选择逃生路线

安科瑞虞佳豪 南京大学无菌动物房改造项目&#xff0c;位于位于南京江北新区学府路 12 号。改造面积约为 1100m2&#xff0c;均在原有建筑底层。其中&#xff0c;动物房区域含饲养室 6 间&#xff0c;层高 4.9m。功能实验区域含实验室 4间、手术室 1 间、暂养室 2 间、内外准备…

Linux进程信号 | 信号产生

前面的文章中我们讲述了进程间通信的部分内容&#xff0c;在本文中我们继续来学习进程信号相关的知识点。 信号入门 生活角度的信号 在我们的日常生活中&#xff0c;就有着各种各样的信号&#xff0c;它会给我们传递各种各样的信息&#xff0c;可以知道的是一个信号例如&…

webpack提升开发体验SourceMap

一、开发场景介绍 开发中我们不可避免的会写一些bug出来&#xff0c;这时候要调试&#xff0c;快速定位到bug到底出现在哪尤为关键。 例如我故意在sum函数中写一个错误代码如下&#xff1a; 这时我们用前面章节已经写好的开发模式的webpack.dev.js运行&#xff0c;控制台会出…

【Spring】— MyBatis与Spring的整合

目录 1.整合环境1.1准备所需的JAR包1&#xff0e;所需Spring框架的JAR包2&#xff0e;所需MyBatis框架的JAR包3&#xff0e;MyBatis与Spring整合所需的中间JAR包4&#xff0e;数据库驱动JAR包5&#xff0e;数据源所需JAR包 1.2 编写配置文件 2.整合2.1 传统DAO方式的开发整合1&…

龙蜥社区第 17 次运营委员会会议顺利召开

5 月 26 日&#xff0c;龙蜥社区走进 Arm 北京办公室召开了第 17 次运营委员会会议。本次会议由龙蜥社区运营委员会副主席金美琴主持。来自 Arm、阿里云、电信、红旗软件、飞腾、海光、Intel、浪潮信息、联通软研院、龙芯、凝思软件、麒麟软件、普华基础软件、申泰、统信软件、…

Vue-Element-Admin项目学习笔记(7)用Node.js写一个简单后端接口

前情回顾&#xff1a; vue-element-admin项目学习笔记&#xff08;1&#xff09;安装、配置、启动项目 vue-element-admin项目学习笔记&#xff08;2&#xff09;main.js 文件分析 vue-element-admin项目学习笔记&#xff08;3&#xff09;路由分析一:静态路由 vue-element-adm…