24_Pandas.DataFrame,Series元素值的替换(replace)

要替换pandas.DataFrame,pandas.Series元素的值,请使用replace()方法。

这里,将描述以下内容。

  • 替换元素
  • 一次替换多个不同的元素
    • 在字典中指定
    • 在列表中指定
    • 注意点
  • 通过指定目标列进行替换
  • 用正则表达式替换
  • 替换缺失值NaN
  • 变更原始项目

以下面的数据为例。一些元素的值已更改以作说明。

import pandas as pd
df = pd.read_csv('./data/24/sample_pandas_normal.csv')
df.iloc[1, 3] = 24
print(df)
#       name  age state  point
# 0    Alice   24    NY     64
# 1      Bob   42    CA     24
# 2  Charlie   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen   24    CA     88
# 5    Frank   30    NY     57

该示例为pandas.DataFrame,但pandas.Series相同。

在第一个参数中指定原始元素的值,在第二个参数中指定替换后的值。

print(df.replace('CA', 'California'))
#       name  age       state  point
# 0    Alice   24          NY     64
# 1      Bob   42  California     24
# 2  Charlie   18  California     70
# 3     Dave   68          TX     70
# 4    Ellen   24  California     88
# 5    Frank   30          NY     57

包括所有列元素。如果您只想替换特定列的值,请参见下文。

print(df.replace(24, 100))
#       name  age state  point
# 0    Alice  100    NY     64
# 1      Bob   42    CA    100
# 2  Charlie   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen  100    CA     88
# 5    Frank   30    NY     57

默认情况下,将返回带有替换元素的新DataFrame,但是如果参数inplace = True,则将更改原始DataFrame。最后,我将介绍一个示例。

一次替换多个不同的元素

如果要一次替换多个不同的元素,则可以使用字典或列表。

在字典中指定

在第一个参数中指定{原始值:替换后的值}的字典。

print(df.replace({'CA': 'California', 24: 100}))
#       name  age       state  point
# 0    Alice  100          NY     64
# 1      Bob   42  California    100
# 2  Charlie   18  California     70
# 3     Dave   68          TX     70
# 4    Ellen  100  California     88
# 5    Frank   30          NY     57

在列表中指定

在第一个参数中指定原始值列表,在第二个参数中指定替换值列表。如果列表的大小(元素数)不匹配,则会发生错误。

print(df.replace(['CA', 24], ['California', 100]))
#       name  age       state  point
# 0    Alice  100          NY     64
# 1      Bob   42  California    100
# 2  Charlie   18  California     70
# 3     Dave   68          TX     70
# 4    Ellen  100  California     88
# 5    Frank   30          NY     57
# print(df.replace(['CA', 24, 'NY'], ['California', 100]))
# ValueError: Replacement lists must match in length. Expecting 3 got 2 

如果将标量值指定为第二个参数,则所有元素都将替换为该值。

print(df.replace(['CA', 24], 'XXX'))
#       name  age state point
# 0    Alice  XXX    NY    64
# 1      Bob   42   XXX   XXX
# 2  Charlie   18   XXX    70
# 3     Dave   68    TX    70
# 4    Ellen  XXX   XXX    88
# 5    Frank   30    NY    57

注意多个替换对之间的原始值和替换值是否相同。由于值是按顺序替换的,因此替换的值会进一步替换。结果取决于顺序。

字典示例。

print(df.replace({'CA': 'NY', 'NY': 'XXX'}))
#       name  age state  point
# 0    Alice   24   XXX     64
# 1      Bob   42   XXX     24
# 2  Charlie   18   XXX     70
# 3     Dave   68    TX     70
# 4    Ellen   24   XXX     88
# 5    Frank   30   XXX     57
print(df.replace({'NY': 'XXX', 'CA': 'NY'}))
#       name  age state  point
# 0    Alice   24   XXX     64
# 1      Bob   42    NY     24
# 2  Charlie   18    NY     70
# 3     Dave   68    TX     70
# 4    Ellen   24    NY     88
# 5    Frank   30   XXX     57

字典的顺序在Python 3.7之后得以保留,但在早期版本中未定义。它并不总是看起来像上面的结果。如果要明确指定顺序,请重复调用replace()。

print(df.replace({'NY': 'XXX'}).replace({'CA': 'NY'}))
#       name  age state  point
# 0    Alice   24   XXX     64
# 1      Bob   42    NY     24
# 2  Charlie   18    NY     70
# 3     Dave   68    TX     70
# 4    Ellen   24    NY     88
# 5    Frank   30   XXX     57

在列表中,第一个元素将首先被替换。当顺序很重要时,使用列表比使用字典更容易。

print(df.replace(['CA', 'NY'], ['NY', 'XXX']))
#       name  age state  point
# 0    Alice   24   XXX     64
# 1      Bob   42   XXX     24
# 2  Charlie   18   XXX     70
# 3     Dave   68    TX     70
# 4    Ellen   24   XXX     88
# 5    Frank   30   XXX     57
print(df.replace(['NY', 'CA'], ['XXX', 'NY']))
#       name  age state  point
# 0    Alice   24   XXX     64
# 1      Bob   42    NY     24
# 2  Charlie   18    NY     70
# 3     Dave   68    TX     70
# 4    Ellen   24    NY     88
# 5    Frank   30   XXX     57

通过指定目标列进行替换

通过将{列名称:{原始值:替换后的值}}的字典指定为第一个参数,只能替换目标列的元素。您可以通过增加字典元素的数量来一次替换多个列和多个值。

print(df.replace({'age': {24: 100}}))
#       name  age state  point
# 0    Alice  100    NY     64
# 1      Bob   42    CA     24
# 2  Charlie   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen  100    CA     88
# 5    Frank   30    NY     57
print(df.replace({'age': {24: 100, 18: 0}, 'point': {24: 50}}))
#       name  age state  point
# 0    Alice  100    NY     64
# 1      Bob   42    CA     50
# 2  Charlie    0    CA     70
# 3     Dave   68    TX     70
# 4    Ellen  100    CA     88
# 5    Frank   30    NY     57

无法在列表中指定原始值和替换后的值。

# print(df.replace({'age': [[24, 18], [100, 0]], 'point': {24: 50}}))
# TypeError: If a nested mapping is passed, all values of the top level mapping must be mappings

如果要用相同的值替换所有值,请在第一个参数中指定{column name:original value}字典,并在替换后的第二个参数中以标量值指定值。可以将第一个参数的原始值指定为列表。

print(df.replace({'age': 24, 'point': 70}, 100))
#       name  age state  point
# 0    Alice  100    NY     64
# 1      Bob   42    CA     24
# 2  Charlie   18    CA    100
# 3     Dave   68    TX    100
# 4    Ellen  100    CA     88
# 5    Frank   30    NY     57
print(df.replace({'age': [24, 18], 'point': 70}, 100))
#       name  age state  point
# 0    Alice  100    NY     64
# 1      Bob   42    CA     24
# 2  Charlie  100    CA    100
# 3     Dave   68    TX    100
# 4    Ellen  100    CA     88
# 5    Frank   30    NY     57

用正则表达式替换

正则表达式可以与参数regex = True一起使用。

例如,默认情况下,仅在元素值完全匹配时才替换元素值,因此即使它们部分匹配,也不会替换它们。

print(df.replace('li', 'LI'))
#       name  age state  point
# 0    Alice   24    NY     64
# 1      Bob   42    CA     24
# 2  Charlie   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen   24    CA     88
# 5    Frank   30    NY     57

例如,如果要替换元素的部分字符串,则使用参数regex = True将其设置为正则表达式。

()中包含的部分可以在替换后按顺序用作组,例如\ 1和\ 2。

print(df.replace('(.*)li(.*)', r'\1LI\2', regex=True))
#       name  age state  point
# 0    ALIce   24    NY     64
# 1      Bob   42    CA     24
# 2  CharLIe   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen   24    CA     88
# 5    Frank   30    NY     57

当regex = True时,将正则表达式模式指定为第一个参数,将替换后的字符串指定为第二个参数。

如果要替换特定列元素的一部分字符串,也可以使用字符串方法str.replace()。

df['name'] = df['name'].str.replace('li', 'LI')
print(df)
#       name  age state  point
# 0    ALIce   24    NY     64
# 1      Bob   42    CA     24
# 2  CharLIe   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen   24    CA     88
# 5    Frank   30    NY     57

详情请参阅以下文章

替换缺失值NaN

提供了一种名为fillna()的方法来替换缺失值NaN。

尽管可以使用replace(),但fillna()可以根据行或列替换不同的值。

详情请参阅以下文章

变更原始项目

默认情况下,将返回带有替换元素的新DataFrame,但是如果参数inplace = True,则将更改原始DataFrame。

df = pd.read_csv('./data/24/sample_pandas_normal.csv')
print(df)
#       name  age state  point
# 0    Alice   24    NY     64
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen   24    CA     88
# 5    Frank   30    NY     57
df.replace('CA', 'California', inplace=True)
print(df)
#       name  age       state  point
# 0    Alice   24          NY     64
# 1      Bob   42  California     92
# 2  Charlie   18  California     70
# 3     Dave   68          TX     70
# 4    Ellen   24  California     88
# 5    Frank   30          NY     57
                    24_Pandas.DataFrame,Series元素值的替换(replace)要替换pandas.DataFrame,pandas.Series元素的值,请使用replace()方法。这里,将描述以下内容。替换元素一次替换多个不同的元素在字典中指定在列表中指定注意点通过指定目标列进行替换用正则表达式替换替换缺失值NaN变更原始项目以下面的数据为例。一些元素的值已更改以作说明。import pandas as pddf = pd.read_csv('./data/2
				
pandas.DataFrame 索引df.loc / df:选择行与列df:选择列df.loc:选择行df.iloc:按整数位置选择行布尔型索引多重索引 df.loc / df:选择行与列 df:选择列 默认一般用于选择列,但也可以选择行 import numpy import pandas df = pandas.DataFrame(numpy.random.rand(12).reshape(3,4), index = ["one","two","three"],columns = list("abcd")) print(df) # 按照列名选择列,只选择一列则输出Series,选择多列
df = pd.DataFrame(np.random.rand(16).reshape(4, 4) * 100, columns=['a', 'b', 'c', 'd']) print("df = \n", df) print("-" * 100) # 新增列/行并赋 df['e'] = 10 df.loc[4] = 20 print("df = \n", 在介绍Series的方法之前,需要一些现实世界的数据集,本文会使用以下三个CSV文件: - pokemon.csv,超过800个的Pokémon,这是任天堂最受欢迎的宠物小精灵 - google_stock.csv,Google从2004年8月首次亮相到2019年10月的每日美元价格 - revolutionary_war.csv,美. None:None是Python单例对象,通常用于丢失Python代码中的数据。 NaN(非数字的缩写),是所有使用标准ieee浮点表示的系统所认可的特殊浮点pandas对于None和NaN本质上是可互换的,用于表示缺失或空。 在Pandas DataFrame中有几个用于检测、删除和替换的有用函数: isnull()
导入实验常用的python包。如图2所示。 【import pandas as pd】pandas用来做数据处理。【import numpy as np】numpy用来做高维度矩阵运算.【import matplotlib.pyplot as plt】matplotlib用来做数据可视化。 pandas数据写入到csv文件中: 【names = [‘Bob’,’Jessica’,’Mary’,’John’,’Mel’]】创建一个names列表【 births = [968,155,77,578,973]】创建一个births 列表【DataSet = list(zip(names,birth
DataFrame文件中,对i行j列的那个元素进行替换、插入数据操作,采用的是pd.loc[] pd.iloc[i,j] i,j 只能是数字,即原始索引。 pd.loc[i,‘j’] i,j既可以是数字,也可是字母,即索引标签。 这两个函数经常用来提取指定位置的数据,直接对其赋也是可以的。 pd.... pandas.Series.replace 官方文档 Series.replace(to_replace=None, value=NoDefault.no_default, inplace=False, limit=None, regex=False, method=NoDefault.no_default) to_replace: 需要替换 value:替换后的 inplace: 是否在原数据表上更改,默认 inplace=False limit:向
Pythonpandas库中,可以使用replace方法来批量替换replace方法可以用来替换DataFrameSeries中的特定。 以下是使用replace方法批量替换的示例代码: ```python import pandas as pd # 创建示例数据 data = pd.DataFrame({'col_a': [1, 2, 3, 2, 5], 'col_b': [4, 5, 6, 7, 8], 'col_c': [9, 2, 11, 2, 13}) # 批量替换col_a列的 data['col_a'] = data['col_a'].replace(2, 111) print(data) 输出结果为: col_a col_b col_c 0 1 4 9 1 111 5 2 2 3 6 11 3 111 7 2 4 5 8 13 在上述示例中,我们使用replace方法将col_a列中的为2的元素替换为111。 相关问题: 1. 如何在pandas中批量替换DataFrame的多个列? 2. 如何在pandas替换DataFrame中的字符串列的特定? 3. 如何使用条件语句在pandas替换DataFrame的列? 4. 如何在pandas替换DataFrame中的缺失?<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>