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种常见方法 的相关文章

  • [python]没有属性“TessBaseAPI”

    当我编译代码时出现错误 import tessercat api tesseract TessBaseAPI 错误是 AttributeError 模块 对象没有属性 TessBaseAPI 我已经安装了tesseract via pip
  • Python 列表理解不适用于 itertools.groupby 解码

    我正在尝试解码结果itertools groupby到一个值列表中 我的来源是 x 1 2 2 1 6 3 6 5 1 3 最初的方法是使用 for 语句来实现 如下所示 keyfunc itemgetter 0 groups unique
  • 导入错误:没有名为“wordcloud”的模块

    我正在努力将 wordcloud 安装到我的环境中 这是我正在运行的代码 import os import matplotlib pyplot as plt from wordcloud import WordCloud 我收到以下错误 I
  • 将分布拟合到直方图

    I want to know the distribution of my data points so first I plotted the histogram of my data My histogram looks like th
  • 使用 python-docx 在 docx 文件中查找所有“正常”样式且字体大小不是 11 的文本

    到目前为止我的实现 from docx api import Document import pandas as pd from docx shared import Pt texts sizes document Document new
  • 什么时候用==,什么时候用is?

    奇怪的是 gt gt gt a 123 gt gt gt b 123 gt gt gt a is b True gt gt gt a 123 gt gt gt b 123 gt gt gt a is b False Seems a is b
  • 将查询参数添加到 URL

    我正在尝试自动从网站下载数据 我需要将动态参数传递到每天更改的站点 html 的结构是表格而不是表单 如何传递参数并从 url 获取结果 这是我尝试过的 它需要在 python 2 7 中 import urllib url https d
  • Bottle 是否可以处理没有并发的请求?

    起初 我认为 Bottle 会并发处理请求 所以我编写了如下测试代码 import json from bottle import Bottle run request response get post import time app B
  • 如何将字符串方法应用于数据帧的多列

    我有一个包含多个字符串列的数据框 我想使用对数据帧的多列上的系列有效的字符串方法 我希望这样的事情 df pd DataFrame A 123f 456f B 789f 901f df Out 15 A B 0 123f 789f 1 45
  • PyPI 上的轮子平台约束有什么限制吗?

    是否有任何地方 PEP 或其他地方 声明关于 Linux 轮子上传范围的限制 PyPI http pypi io 应该有 具体来说 上传是否被认为是可接受的做法linux x86 64轮子到 PyPI 而不是manylinux1 x86 6
  • Numpy 通过一个数组的值总结另一个数组

    我正在尝试找到一种矢量化方法来完成以下任务 假设我有一个 x 和 y 值的数组 请注意 x 值并不总是整数并且可以为负数 import numpy as np x np array 1 1 1 3 2 2 2 5 4 4 dtype flo
  • Python `concurrent.futures`:根据完成顺序迭代 future

    我想要类似的东西executor map 除了当我迭代结果时 我想根据完成的顺序迭代它们 例如首先完成的工作项应该首先出现在迭代中 等等 这样 当且仅当序列中的每个工作项尚未完成时 迭代就会阻塞 我知道如何使用队列自己实现这一点 但我想知道
  • django 中的“管理器”是什么?

    我已经阅读了Django官方中的定义文档 https docs djangoproject com en dev topics db managers 我仍然对什么感到困惑Manager does 文档说它们允许您操作数据库表 模型 但我仍
  • Docker Build 找不到 pip

    尝试关注一些 1 https aws amazon com blogs aws run docker apps locally using the elastic beanstalk eb cli 2 http docs aws amazo
  • 如何使用 Ajax 在 Flask 中发布按钮值而不刷新页面?

    我有一个问题 当我单击 Flask 应用程序中的按钮时 我想避免重新加载 我知道有 Ajax 解决方案 但我想知道如何将我的按钮链接到 ajax 函数以发布按钮值并运行链接到其值的 python 函数 这是我的 html 按钮 div di
  • 为什么 tesseract 无法从这个简单的图像中读取文本?

    我在 pytesseract 上阅读了大量的帖子 但我无法让它从一个简单的图像中读取文本 它返回一个空字符串 这是图像 我尝试过缩放它 灰度化它 调整对比度 阈值 模糊 以及其他帖子中所说的一切 但我的问题是我不知道 OCR 想要更好地工作
  • 用户的完整 UNIX 用户名

    想知道您是否知道是否有一种巧妙的方法可以从 shell 获取完整的用户名 示例 如果我的 UNIX 用户名是 froyo 那么我想获取我的全名 在本例中 如系统中注册的那样 froyo Abhishek Pratap Finger 命令可以
  • Python 可以替代 Java 小程序吗?

    除了制作用于物理模拟 如抛射运动 重力等 的教育性 Java 小程序之外 还有其他选择吗 如果你想让它在浏览器中运行 你可以使用PyJamas http pyjs org 这是一个 Python 到 Javascript 的编译器和工具集
  • Python模糊字符串匹配作为相关样式表/矩阵

    我有一个文件 其中包含 x 个字符串名称及其关联的 ID 本质上是两列数据 我想要的是一个格式为 x by x 的相关样式表 将相关数据作为 x 轴和 y 轴 但我想要 fuzzywuzzy 库的函数 fuzz ratio x y 作为输出
  • 使用Python的线程模块调用ctypes函数比使用多处理更快?

    我一生都无法找出这个问题的答案 我编写了一个可以执行数百次繁重计算的脚本 我有一个绝妙的主意 将这些计算任务编写为 C 然后使用 Python 的 ctypes 与它们交互 我心想 我什至可以使用并行性进一步优化它 我最初的方法是使用线程

随机推荐

  • 计操理论课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