使用Pandas修改DataFrame中某一列的值
作者:Sun_Sherry 发布时间:2021-04-14 14:52:21
标签:pandas,dataframe,列
写这篇博客主要是因为在修改DataFrame列值的时候经常遇到bug,但到目前还没把这种错误复现出来。
DataFrame是Pandas中的主要数据结构之一,本篇博客主要介绍如何DataFrame中某一列的值进行修改。
1 常规方法
这部分主要介绍修改DataFrame列值的常规方法。为了方便后续说明先构建如下数据:
import pandas as pd
import numpy as np
df=pd.DataFrame([['A',1],['B',2],['C',5],['D',4],['E',10],['F',13],['G',8]],
columns=['col_1','col_2'],
index=list('abcdefg'))
df结果如下:
使用常量修改DataFrame列的值
使用一个常量对DataFrame列中的数据进行修改时,代码举例如下:
df1=df.copy()
df1['col_1']='H'
df1.loc[['a','c','d'],'col_2']=100 #将指定索引的列值进行修改
df1.iloc[4:,-1]=200
df1的结果如下:
使用List\array修改DataFrame列的值
当需要对DataFrame列中的多个值进行修改时,可以使用List或array等变量型数据来对其进行修改。具体代码如下:
df2=df.copy()
df2['col_1']=list(range(7))
df2.loc[df2.index<='d','col_2']=np.array([15,20,25,30])
df2.iloc[4:,-1]=np.array([10,5,0])
df2的结果如下:
使用Series/DataFrame修改DataFrame列的值
除了以上两种数据类型之外,还可以使用Series型数据来修改DataFrame列的值。但使用这种方法时,需要索引对齐,否则会出错。具体举例如下:
df3=df.copy()
df3['col_1']=pd.Series([1,2,3,4,5,6,7]) #索引不对齐时不会报错,但没有成功修改列值。
df3.loc[['a','b','c'],'col_2']=pd.Series([100,200,300],index=list('abc'))
df3.iloc[3:,-1]=pd.DataFrame([[4000],[5000],[6000],[7000]],index=list('cdef'))
其结果如下:
2. replace方法
DataFrame对象自带的方法replace()也可以实现列值的修改。该方法中的参数主要有以下几个:
参数 | 作用 |
---|---|
to_replace | 确定需要修改列值的数据。可接受的数据类型有:str, regex, list, dict, Series, int, float, or None |
value | 指定修改后的值。可接受的数据类型有:scalar, dict, list, str, regex, default None |
inplace | 是否本地置换 |
limit | 指定前后填充的最大次数 |
regex | 正则表达式符号。如果需要在to_replace中使用字符串形式的正则表达式对数据进行筛选的话,需要将其设置为True。 |
method | 填充方式。‘pad’, ‘ffill’, ‘bfill’, None |
创建如下数据,具体如下:
df=pd.DataFrame([['A','A'],['B','B'],['C',5],['D',4]],
columns=['col_1','col_2'],
index=list('abcd'))
df的结果如下:
对整个DataFrame中的指定数据进行替换
#A替换为aaa,B替换为bbb,4替换为100
df_1=df.replace(to_replace=['A','B',4],value=['aaa','bbb',100])
#将A替换为AAAA
df_2=df.replace(to_replace='A',value='AAAA')
#将A替换为AAAAA,5替换为2000
df_3=df.replace(to_replace={"A":'AAAAA',5:2000})
其结果如下:
对DataFrame中的不同列指定不同的替换方式
#对于col_1列:将A替换为1,B替换为2
#对于col_2列:将A替换为100,B替换为200
df_4=df.replace({"col_1":{'A':1,'B':2},"col_2":{"A":100,"B":200}})
其结果如下:
使用正则表达式筛选数据
#将A\B替换成new
df_5=df.replace(to_replace=r'[AB]',value='new',regex=True)
其结果如下:
补充:DataFrame修改某一行某一列的值[坑点]
# df.iloc[index]['column_name'] = val 这种方式是错误的
df['column_name'].iloc[i] = val # 正确
总结
来源:https://blog.csdn.net/yeshang_lady/article/details/127619031


猜你喜欢
- 0.偶然间看到一个奇怪的现象>>> x = 1>>> a = var()>>> a[&
- /* 建立数据表 */ create table td_base_data( id int(10) not null auto_increm
- 1. 关闭mysql服务# service mysqld stop2. 检查是否有rpm包,如果没有用rpm安装过mysql,不应该有残留,
- 参考自官方文档参数注册尝试自己写GoogLeNet时碰到的问题,放在字典中的参数无法自动注册,所谓的注册,就是当参数注册到这个网络上时,它会
- 简介A的独有+AB的公有B的独有+AB的公有AB的公有A的独有B的独有A的独有+B的独有+AB的公有A的独有+B的独有练习建表部门表DROP
- 前言本篇给大家分享一下《通过Python的pdfplumber库将pdf转为图片》。一、pdfplumber库是什么?pdfplumber是
- 一、配置文件大小及数量日志文件代码需要引入RotatingFileHandler方法,如下:from logging.handlers im
- open(filename,mode,buffer) 其中第一个参数是要打开的文件的文件名,必选;第二个是打开方式,可选;第三个为缓冲区,可
- 使用了telnetlib模块,首先登录到交换机,列出并获取配置文件的名称,然后通过tftp协议将配置文件传输到文件服务器上,为避免配置文件覆
- 在Java编程开发中,网络通信的开发是很重要的一部分,它是两台或多台计算机进行网络的基础,网络程序编写的目的也就是为了与其他计算机之间进行网
- 下载GPL版本安装MySQL Community Edition(GPL)Community (GPL) Downloads &ra
- Pygame是一个超好用的SDL绑定。自从有了Pygame,妈妈再也不用担心我内存泄漏了。但是这里有一个问题,Pygame的Movie模块已
- 如何用SQLMail建立一个电子刊物自动处理系统?下面我们用SQLMail来做一个电子刊物自动处理系统。在这个系统中,主要实现两个功能:1、
- 人们对于产品设计这类事情,往往容易眼高手低,在宇宙层面上夸夸其谈,却落不了地,只能飘着。真正到了自己动手的时候,才会发现问题很多,实践和理论
- 守来说,AJAX在现在是热得不能再热的技术。没有人能否认,它拥有大批的支持者。在CNN上,它从二月份的一个不被看好的词语到十月份成长成一个初
- QPS原理:每天80%的访问集中在20%的时间里,这20%时间叫做峰值时间。公式:( 总PV数 * 80% ) / ( 每天秒数 * 20%
- 版本:平台:ubuntu 14 / I5 / 4G内存python版本:python2.7opencv版本:2.13.4依赖:如果系统没有p
- 1. 输入一个百分制成绩,要求输出成绩等级A、B、C、D、E,其中90~100分为A,80~89分为B,70~79分为C,60~69分为D,
- 一、简介flask中session组件可分为内置的session组件还有第三方flask-session组件,内置的session组件功能单
- 在python中enumerate的用法多用于在for循环中得到计数,本文即以实例形式向大家展现python中enumerate的用法。具体