使用Pandas修改DataFrame中某一列的值

作者:Sun_Sherry 时间:2021-04-14 14:52:21 

写这篇博客主要是因为在修改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结果如下:

使用Pandas修改DataFrame中某一列的值

  • 使用常量修改DataFrame列的值

使用一个常量对DataFrame列中的数据进行修改时,代码举例如下:

df1=df.copy()
df1['col_1']='H'
df1.loc[['a','c','d'],'col_2']=100 #将指定索引的列值进行修改
df1.iloc[4:,-1]=200

df1的结果如下:

使用Pandas修改DataFrame中某一列的值

  • 使用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的结果如下:

使用Pandas修改DataFrame中某一列的值

  • 使用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'))

其结果如下:

使用Pandas修改DataFrame中某一列的值

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填充方式。&lsquo;pad&rsquo;, &lsquo;ffill&rsquo;, &lsquo;bfill&rsquo;, None

创建如下数据,具体如下:

df=pd.DataFrame([['A','A'],['B','B'],['C',5],['D',4]],
               columns=['col_1','col_2'],
               index=list('abcd'))

df的结果如下:

使用Pandas修改DataFrame中某一列的值

  • 对整个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})

其结果如下:

使用Pandas修改DataFrame中某一列的值

  • 对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}})

其结果如下:

使用Pandas修改DataFrame中某一列的值

  • 使用正则表达式筛选数据

#将A\B替换成new
df_5=df.replace(to_replace=r'[AB]',value='new',regex=True)

其结果如下:

使用Pandas修改DataFrame中某一列的值

补充:DataFrame修改某一行某一列的值[坑点]

# df.iloc[index]['column_name'] = val 这种方式是错误的
df['column_name'].iloc[i] = val # 正确

总结 

来源:https://blog.csdn.net/yeshang_lady/article/details/127619031

标签:pandas,dataframe,列
0
投稿

猜你喜欢

  • Python中列表的基本操作汇总

    2021-08-20 23:21:27
  • 把你的数据库置于版本控制之下

    2009-04-25 10:01:00
  • Python线性网络实现分类糖尿病病例

    2022-03-13 11:23:25
  • python脚本实现验证码识别

    2022-02-03 09:41:30
  • Phar反序列化超详细介绍

    2023-06-05 07:06:02
  • php下pdo的mysql事务处理用法实例

    2023-11-14 17:44:13
  • sql分类汇总及Select的自增长脚本

    2012-07-21 14:40:14
  • python mac下安装虚拟环境的图文教程

    2021-11-02 23:35:21
  • 15个设计得最糟糕最变态的CAPTCHA验证码

    2008-09-01 17:17:00
  • python使用正则表达式分析网页中的图片并进行替换的方法

    2022-04-12 02:32:40
  • python爬虫实例之获取动漫截图

    2023-08-17 22:13:57
  • python实战教程之OCR文字识别方法汇总

    2021-09-20 05:36:21
  • python使用requests.session模拟登录

    2022-09-12 19:17:24
  • Python+Pygame实现之走四棋儿游戏的实现

    2023-08-29 21:34:55
  • Python编程实现tail-n查看日志文件的方法

    2023-07-26 01:17:42
  • python实现一个简单的ping工具方法

    2022-01-27 17:20:41
  • python处理PHP数组文本文件实例

    2023-11-09 23:56:03
  • Python的Django中将文件上传至七牛云存储的代码分享

    2023-11-28 14:00:24
  • Php header()函数语法及使用代码

    2023-09-04 13:32:20
  • 浏览器tab的设计

    2008-08-11 13:03:00
  • asp之家 网络编程 m.aspxhome.com