pandas添加新列的5种常见方法

2023-11-11

前言

pandas为DataFrame格式数据添加新列的方法非常简单,只需要新建一个列索引,再为其赋值即可。

以下总结了5种常见添加新列的方法。

首先,创建一个DataFrame结构数据,作为数据举例。

1

2

3

4

5

6

importpandas as pd

# 创建一个DataFrame结构数据

data ={'a': ['a0', 'a1', 'a2'],

'b': ['b0', 'b1', 'b2']}

df =pd.DataFrame(data)

print('举例数据情况:\n', df)

添加新列的方法,如下:

一、insert()函数

语法:

DataFrame.insert(loc, column, value,allow_duplicates = False)

参数

说明

loc

必要字段,int类型数据,表示插入新列的列位置,原来在该位置的列将向右移。

column

必要字段,插入新列的列名。

value

必要字段,新列插入的值。如果仅提供一个值,将为所有行设置相同的值。可以是int,string,float等,甚至可以是series /值列表。

allow_duplicates

布尔值,用于检查是否存在具有相同名称的列。默认为False,不允许与已有的列名重复。

实例:插入c列

1

2

df.insert(loc=2, column='c', value=3) # 在最后一列后,插入值全为3的c列

print('插入c列:\n', df)

二、直接赋值法

语法:df[‘新列名’]=新列的值

实例:插入d列

1

2

df['d'] =[1, 2, 3] # 插入值为[1,2,3]的d列

print('插入d列:\n', df)

注:该方法不可以选择插入新列的位置,默认为最后一列。如果新增的一列值相同,直接为其赋值一个常量即可;如果插入值不同,为列表格式,需与已有列的行数长度一致,如举例中原来列为3行,新增列也必须有3个值。

三、reindex()函数

语法:df.reindex(columns=[原来所有的列名,新增列名],fill_value=值)

df = df.reindex(columns=df.columns.tolist() + ['新增列名']+['新增列名'])

reindex()函数用法较多,此处只是针对添加新列的用法

实例:插入e列

1

2

3

4

df1 =df.reindex(columns=['a', 'b', 'c', 'd', 'e']) # 不加fill_value参数,默认值为Nan

df2 =df.reindex(columns=['a', 'b', 'c', 'd', 'e'], fill_value=1) # 加入fill_value参数,填充值为1

print('插入e列(不加fill_value参数):\n', df1)

print('插入e列(加fill_value参数):\n', df2)

注:该方法需要把原有的列名和新列名都加上,如果列名过多,就比较麻烦。

四、concat()函数

原理:利用拼接的方式,添加新的一列。好处是可以同时新增多个列名。

concat()函数用法较多,此处只是针对添加新列的用法

实例:插入f列

1

2

df1 =pd.concat([df1, pd.DataFrame(columns=['f'])])

print('插入f列:\n', df1)

五、loc()函数

原理:利用loc的行列索引标签来实现。

语法:df.loc[:,新列名]=值

实例:插入g列

1

2

df1.loc[:, 'g'] =0

print('插入g列:\n', df1)

以上就是pandas添加新列的5种常见用法。

附:pandas根据现有列新添加一列

pandas中一个Dataframe,经常需要根据其中一列再新建一列,比如一个常见的例子:需要根据分数来确定等级范围,下面我们就来看一下怎么实现。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

defgetlevel(score):

ifscore < 60:

return"bad"

elifscore < 80:

return"mid"

else:

return"good"

deftest():

data ={'name': ['lili', 'lucy', 'tracy', 'tony', 'mike'],

'score': [85, 61, 75, 49, 90]

}

df =pd.DataFrame(data=data)

# 两种方式都可以

# df['level'] = df.apply(lambda x: getlevel(x['score']), axis=1)

df['level'] =df.apply(lambdax: getlevel(x.score), axis=1)

print(df)

上面代码运行结果

name score level
0 lili 85 good
1 lucy 61 mid
2 tracy 75 mid
3 tony 49 bad
4 mike 90 good

要实现上面的功能,主要是使用到dataframe中的apply方法。

上面的代码,对dataframe新增加一列名为level,level由分数一列而来,如果小于60分为bad,60-80之间为mid,80以上为good。

其中axis=1表示原有dataframe的行不变,列的维数发生改变。

总结

到此这篇关于pandas添加新列的5种常见方法的文章就介绍到这了

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pandas添加新列的5种常见方法 的相关文章

随机推荐

  • 计操理论课04 -- openEuler实验第三章进程管理

    文章目录 任务1 创建并运行内核线程 任务要求 任务代码 任务截图 任务2 打印输出当前系统 CPU 负载情况 任务要求 任务代码 任务截图 任务3 打印输出当前处于运行状态的进程的 PID 和名字 任务要求 任务代码 任务截图 任务4 使
  • 区块链基本概念学习笔记

    文章目录 区块链产生与发展历史 区块链的场景属性 区块链定义 区块链的特点 区块链加密货币的特点 区块链核心技术 区块链的核心概念 区块链分类 区块链架构特点 区块链产生与发展历史 区块链的场景属性 区块链定义 区块链是一种点对点传输协议
  • 交叉编译并移植Android工具adb与adbd过程

    Android tool 移植adb与adbd的记录 近期研发一个新功能 需要用到Android的adbd服务 如是尝试着交叉编译adbd 由于目前的使用场景是PC端通过usb连接到开发板上 利用adb push pull 进行文件的传输
  • 一个浮点数跨平台产生的问题

    感谢网友唐磊 微博 唐磊 name 投稿 本文原文在唐磊的博客上 原文地址 原文分析还不够好 而且可能对人有误导 所以 我对原文做了很多修改 并加了Linux下的内容 浮点数是一个很复杂的事情 希望这篇文章有助于大家了解浮点数与其相关的C
  • LeetCode【129】求根到叶子节点数字之和

    题目 给定一个二叉树 它的每个结点都存放一个 0 9 的数字 每条从根到叶子节点的路径都代表一个数字 例如 从根到叶子节点路径 1 gt 2 gt 3 代表数字 123 计算从根到叶子节点生成的所有数字之和 说明 叶子节点是指没有子节点的节
  • 电子游戏,一个价值千亿美元的机会

    如果元宇宙确实是互联网的继承者 那么说它的 前辈 来自电子游戏行业似乎很奇怪 毕竟 到目前为止 互联网与电子游戏行业的发展轨迹是完全不同的 互联网起源于政府的研究实验室和大学 后来 它逐渐扩展到企业 然后是中小企业 最后才是消费者 娱乐业可
  • 数据库事务(Database Transaction)

    数据库事务 Database Transaction 数据库事务 Database Transaction 是由一系列对系统中数据进行访问与更新的操作所组成的一个程序执行逻辑单元 一个数据库事务通常包含了一个序列的对数据库的读 写操作 它的
  • 12个Flex常用功能代码

    12个Flex常用功能代码 1 复制内容到系统剪贴板 1 System setClipboard strContent 2 复制一个ArrayCollection 1 dummy solution well it works 2 var b
  • ubuntu下配置vim

    1 安装vim sudo apt get install vim full2 配置文件的位置在目录 etc vim下面 有个名为vimrc的文件 这是系统中公共的vim配置文件 对所有用户都有效 3 设置语法高亮显示1 打开vimrc 添加
  • DLNA介绍(包括UPnP,2011/6/20 更新)

    这部分的内容大多来源于网络及官方文档 按照自己的翻译理解整理所成 东西比较多 从头慢慢看还是可以懂个大概的 目录 一 DNLA的建立 二 DLNA的成员 三 DLNA标准的制定 四 DLNA的设备 五 DLNA的架构 六 云时代的数字家庭
  • Python中列表、字典、元组、集合数据结构整理

    这篇文章主要介绍了Python中列表 字典 元组 集合数据结构整理 较为详细的分析了这几类数据结构的具体用法及相关技巧 需要的朋友可以参考下 本文详细归纳整理了Python中列表 字典 元组 集合数据结构 分享给大家供大家参考 具体分析如下
  • 518. 零钱兑换 II -- 完全背包

    518 零钱兑换 II 这道题其实就是一个完全背包问题 关于背包问题的相关文章见 01背包问题 动态规划 完全背包问题 class CoinChange 完全背包 518 零钱兑换 II https leetcode cn problems
  • Android Automotive-sensor服务详解

    本章将会详细介绍Android原生车辆服务的传感器处理流程 同时还会介绍Mananger lt lt gt gt Service之间数据传输协议 即Manager如何与Service进行交互 Car Sensor数据传递时序 车辆控制之Se
  • 二分查找(Binary Search) 常见问题解决方法总结

    缘由 今天浏览 何登成的技术博客 无意中发现了写的blog 二分查找 Binary Search 需要注意的问题 以及在数据库内核中的实现 随想总结下二分查找的常见问题 问题背景 今年的实习生招聘考试 我出了一道二分查找 Binary Se
  • Vue2安装Vuex报错:npm ERR code ERESOLVE npm ERR ERESOLVE unable to resolve dependency tree.

    Vue2安装Vuex报错 npm ERR code ERESOLVE npm ERR ERESOLVE unable to resolve dependency tree
  • 职场新人入门指南(干货)

    目录 报联商 如何写一封邮件 最简单的时间管理方法 文件管理方法 职场新人必懂的潜规则 细节展现潜力 处处留心皆学问 Excel常用操作 新人需要学习的文职工作法宝 流程图 快速掌握的工具 搜索引擎的正确使用方法 十个帮你成长的网站 行业大
  • 33 openEuler使用LVM管理硬盘-管理逻辑卷

    文章目录 33 openEuler使用LVM管理硬盘 管理逻辑卷 33 1 创建逻辑卷 33 2 查看逻辑卷 33 3 调整逻辑卷大小 33 4 扩展逻辑卷 33 5 收缩逻辑卷 33 6 删除逻辑卷 33 openEuler使用LVM管理
  • 三菱M80操作介绍_三菱数控系统#6451参数引起的通信故障案例

    三菱E60系统故障案例 关于 6451参数引起的通信故障案例 故障1现象 在传送PLC 程序时中途中断 断电后 重新设定 6451 00110000 屏幕立即变为灰屏 只有将 6451 00010000 屏幕又恢复正常 将系统做维修格式化
  • react 中样式写法

    方式一 行内样式 优点 基于内联样式书写的样式肯定不会导致样式冲突 可以动态获取state中的状态来完成动态样式 缺点 采用小驼峰写法 有的css书写没有提示易错 在JSX中写大量的style样式 比较混乱 伪类 伪元素这种样式无法通过内联
  • pandas添加新列的5种常见方法

    前言 pandas为DataFrame格式数据添加新列的方法非常简单 只需要新建一个列索引 再为其赋值即可 以下总结了5种常见添加新列的方法 首先 创建一个DataFrame结构数据 作为数据举例 1 2 3 4 5 6 importpan