【Python】图解Pandas的宝藏函数:assign
公众号:尤而小屋
作者:Peter
编辑:Peter
在我们处理数据的时候,有时需要根据某个列进行计算得到一个新列,以便后续使用,相当于是根据已知列得到新的列,这个时候assign函数非常方便。下面通过实例来说明函数的的用法。
Pandas文章
本文是Pandas文章连载系列的第21篇,主要分为3类:
1、基础部分:1-16篇,主要是介绍Pandas中基础和常用操作,比如数据创建、检索查询、排名排序、缺失值/重复值处理等常见的数据处理操作
2、进阶部分:第17篇开始讲解Pandas中的高级操作方法
3、对比SQL,学习Pandas:将SQL和Pandas的操作对比起来进行学习
参数
assign函数的参数只有一个:DataFrame.assign(**kwargs)。
**kwargs: dict of {str: callable or Series}
关于参数的几点说明:
列名是关键字keywords
如果列名是可调用的,那么它们将在DataFrame上计算并分配给新的列
如果列名是不可调用的(例如:Series、标量scalar或者数组array),则直接进行分配
最后,这个函数的返回值是一个新的DataFrame数据框,包含所有现有列和新生成的列
导入库
import pandas as pd
import numpy as np
# 模拟数据df = pd.DataFrame({"col1":[12, 16, 18],"col2":["xiaoming","peter", "mike"]})df
col1 | col2 | |
---|---|---|
0 | 12 | xiaoming |
1 | 16 | peter |
2 | 18 | mike |
实例
当值是可调用的,我们直接在数据框上进行计算:
方式1:直接调用数据框
# 方式1:数据框df上调用
# 使用数据框df的col1属性,生成col3df.assign(col3=lambda x: x.col1 / 2 + 20)
col1 | col2 | col3 | |
---|---|---|---|
0 | 12 | xiaoming | 26.0 |
1 | 16 | peter | 28.0 |
2 | 18 | mike | 29.0 |
我们可以查看原来的df,发现它是不变的
df # 原数据框不变的
col1 | col2 | |
---|---|---|
0 | 12 | xiaoming |
1 | 16 | peter |
2 | 18 | mike |
操作字符串类型的数据:
df.assign(col3=df["col2"].str.upper())
方式2:调用Series数据
可以通过直接引用现有的Series或序列来实现相同的行为:
# 方式2:调用现有的Series来计算df.assign(col4=df["col1"] * 3 / 4 + 25)
df # 原数据不变
col1 | col2 | |
---|---|---|
0 | 12 | xiaoming |
1 | 16 | peter |
2 | 18 | mike |
在Python3.6+中,我们可以在同一个赋值中创建多个列,并且其中一个列还可以依赖于同一个赋值中定义的另一列,也就是中间生成的新列可以直接使用:
df.assign(col5=lambda x: x["col1"] / 2 + 10, col6=lambda x: x["col5"] * 5, # 在col6计算中直接使用col5 col7=lambda x: x.col2.str.upper(), col8=lambda x: x.col7.str.title() # col8中使用col7
)
df # 原数据不变
col1 | col2 | |
---|---|---|
0 | 12 | xiaoming |
1 | 16 | peter |
2 | 18 | mike |
如果我们重新分配的是一个现有的列,那么这个现有列的值将会被覆盖:
df.assign(col1=df["col1"] / 2) # col1直接被覆盖
col1 | col2 | |
---|---|---|
0 | 6.0 | xiaoming |
1 | 8.0 | peter |
2 | 9.0 | mike |
对比apply函数
我们在pandas中同样可以使用apply函数来实现
df # 原数据
col1 | col2 | |
---|---|---|
0 | 12 | xiaoming |
1 | 16 | peter |
2 | 18 | mike |
生成一个副本,我们直接在副本上操作:
df1 = df.copy() # 生成副本,直接在副本上操作
df2 = df.copy()df1
col1 | col2 | |
---|---|---|
0 | 12 | xiaoming |
1 | 16 | peter |
2 | 18 | mike |
df1.assign(col3=lambda x: x.col1 / 2 + 20)
col1 | col2 | col3 | |
---|---|---|---|
0 | 12 | xiaoming | 26.0 |
1 | 16 | peter | 28.0 |
2 | 18 | mike | 29.0 |
df1 # df1保持不变
col1 | col2 | |
---|---|---|
0 | 12 | xiaoming |
1 | 16 | peter |
2 | 18 | mike |
df1["col3"] = df1["col1"].apply(lambda x:x / 2 + 20)df1 # df1已经发生了变化
col1 | col2 | col3 | |
---|---|---|---|
0 | 12 | xiaoming | 26.0 |
1 | 16 | peter | 28.0 |
2 | 18 | mike | 29.0 |
我们发现:通过assign函数的操作,原数据是不变的,但是通过apply操作的数据已经变化了
BMI指数
最后在模拟一份数据,计算每个人的BMI指数。
身体质量指数,是BMI指数,简称体质指数,是国际上常用的衡量人体胖瘦程度以及是否健康的一个标准。
体重身高
其中:体重单位是kg,身高单位是m
df2 = pd.DataFrame({"name":["xiaoming","xiaohong","xiaosu"],"weight":[78,65,87],"height":[1.82,1.75,1.89]
})df2
name | weight | height | |
---|---|---|---|
0 | xiaoming | 78 | 1.82 |
1 | xiaohong | 65 | 1.75 |
2 | xiaosu | 87 | 1.89 |
# 使用assign函数实现df2.assign(BMI=df2["weight"] / (df2["height"] ** 2))
df2 # 不变
name | weight | height | |
---|---|---|---|
0 | xiaoming | 78 | 1.82 |
1 | xiaohong | 65 | 1.75 |
2 | xiaosu | 87 | 1.89 |
df2["BMI"] = df2["weight"] / (df2["height"] ** 2)df2 # df2生成了一个新的列:BMI
总结
通过上面的例子,我们发现:
使用assign函数生成的DataFrame是不会改变原来的数据,这个DataFrame是新的
assign函数能够同时操作多个列名,并且中间生成的列名能够直接使用
assign和apply的主要区别在于:前者不改变原数据,apply函数是在原数据的基础上添加新列
往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载机器学习的数学基础专辑黄海广老师《机器学习课程》视频课
本站qq群851320808,加入微信群请扫码:
【Python】图解Pandas的宝藏函数:assign相关推荐
- Python使用pandas的crosstab函数计算混淆矩阵并使用Seaborn可视化混淆矩阵实战
Python使用pandas的crosstab函数计算混淆矩阵并使用Seaborn可视化混淆矩阵实战 目录 Python使用pandas的crosstab函数计算混淆矩阵并使用Seaborn可视化混淆 ...
- 【Python】电商用户复购数据实战:图解Pandas的移动函数shift
公众号:尤而小屋 作者:Peter 编辑:Peter 本文主要介绍的是pandas中的一个移动函数:shift.最后结合一个具体的电商领域中用户的复购案例来说明如何使用shift函数. 这个案例综合性 ...
- python的pandas库内的函数_python 中NumPy和Pandas工具包中的函数使用笔记(方便自己查找)...
'first' 按值在原始数据中出现的顺序排名 C.DataFrame DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值.字符串.布尔值等).DataFram ...
- 【python】pandas的append函数报错、不能使用
python版本:3.10 pandas版本:1.4.3 在使用 append函数时,虽然会显示结果,但会报warning,代码及报错结果如下 import pandas as pddt1=pd.re ...
- Python之Pandas库常用函数大全(含注释)
前言:本博文摘抄自中国慕课大学上的课程<Python数据分析与展示>,推荐刚入门的同学去学习,这是非常好的入门视频. 继续一个新的库,Pandas库.Pandas库围绕Series类型和D ...
- 【Python问题】解决python的pandas使用to_excel()函数出现问题
问题描述 使用to_excel()函数报错为:got invalid value of type <class 'xml.etree.ElementTree.Element'>, expe ...
- python applymap_Python pandas.DataFrame.applymap函数方法的使用
DataFrame.applymap(func)[source] 将函数应用于Dataframe元素. 此方法应用一个函数,该函数接受并向DataFrame的每个元素返回一个标量. 参数:func : ...
- python duplicated_Python pandas.DataFrame.duplicated函数方法的使用
DataFrame.duplicated(self,subset = None,keep ='first') 返回表示重复行的布尔Series,可以选择仅考虑某些列. 参数:subse : 列标签或标 ...
- 图解数据分析(13) | Pandas - 核心操作函数大全(数据科学家入门·完结)
作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/33 本文地址:https://www.showmeai.tech/article-d ...
最新文章
- 怎样在表格中选出同一类_超超超超实用的年会策划执行表格模板合集!
- 调查显示:手机单芯片处理器作用日显重要
- 文件服务器vsftp的配置
- Input type=“file“上传文件change事件只触发一次解决方案
- python tts 保存_Python 文件和目录操作学习
- Redis基础-下载安装配置
- YOLOv3剪枝再升级!
- 【Hadoop】Bad connect ack with firstBadLink as ×.×.×.×:50010
- 自动化测试 - 封装WebDriver的getDriver
- 一只青蛙一次可以_“七夕青蛙”被玩坏了,哈哈哈哈哈哈哈哈哈哈太好玩了
- openCV中convertTo的用法
- 从零开发一款Android RTMP播放器
- ubuntu端口转发工具 Rinetd
- SQL练习题,50道
- Gmail企业邮箱让中小企业免费拥有企业邮箱
- vb.net 拓展教程目录
- 苏大计算机学院在哪,苏州大学计算机技术学院导师介绍:纪其进
- 请教modelsim中vlog的用法
- h5php大转盘抽奖,html5的非常简单圆形转盘抽奖代码
- php服务器默认首页,如何修改Apache服务器的默认首页?
热门文章
- id、构造方法、Category 分类、类的本质、description方法、SEL
- 一个linux 和 Windows下都可用的 scoket
- element -ui 表单验证 如果 需要验证的v-model 是对象中的对象 总是提示没有填写....
- bootstrap-datepicker default value
- 图解面向对象中的聚合与耦合概念
- Fiddler本机调试的方法
- sql中 set 和select 的区别
- ASP.NET定时调用WebService 运行后台代码
- python之旅(六) - 自省
- qt show widget_Qt中show()与exec()