Python pandas.DataFrame.replace函数方法的使用

pandas.DataFrame.replace() 函数用于替换 DataFrame 中的值,可以用于替换单个值、多个值或使用字典映射进行替换。它可以在整个 DataFrame 中执行替换操作,或者仅限于特定的列。支持就地修改原 DataFrame,可以通过 limit 控制替换次数,并使用 axis 限定替换的轴。本文主要介绍一下Pandas中pandas.DataFrame.replace方法的使用。

DataFrame.replace(self, to_replace=None, value=None, inplace=False, limit=None, regex=False, method='pad') [source]

to_replace中给出的值替换为value

DataFrame的值被动态替换为其他值。这与使用.loc.iloc进行更新不同,后者要求您指定要使用某个值进行更新的位置。

参数:

to_replace

str, regex, list, dict,

Series, int, float,None

如何找到将要被替换的值。

numeric, str 或 regex:

1)numeric: 等于to_replace的数值将被替换为value

2)str: 完全匹配to_replace的字符串将被替换为值

3)regex: 匹配to_replace的正则表达式将被替换为值

str, regex, 或 numeric的list:

1)首先,如果to_replacevalue都是列表,

那么它们的长度必须相同。

2)其次,如果regex=True

那么两个列表中的所有字符串都将被解释为regex

否则它们将直接匹配。这对值没有太大影响,

因为您只能使用几种可能的替代正则表达式。

3)str、regexnumeric规则同样适用。

dict : 

1)dict可用于为不同的现有值指定不同的替换值。

例如,{'a': 'b', 'y': 'z'}将值'a'替换为'b'

将值'y'替换为'z'

要以这种方式使用dict, value参数应该为None

2)对于数据格式,

dict可以指定在不同的列中替换不同的值。

例如,

{'a': 1, 'b': 'z'}查找列'a'中的值1

和列'b'中的值'z'

并用value中指定的值替换这些值。在这种情况下,

value参数不应该是None。除了指定要搜索的列之外,

您可以将此看作传递两个列表的特殊情况。

3)对于一个DataFrame嵌套字典,

用于DataFrame嵌套字典,

例如,{'a': {'b': np.nan}}

读取如下:'a'列中查找值'b'

并将其替换为NaN

要以这种方式使用嵌套的dict

value参数应该为None

您也可以嵌套正则表达式。

注意列名(嵌套字典中的顶级字典键)不能是正则表达式。

None:

1)这意味着regex参数必须是字符串、

编译regexlistdict

ndarray或这类元素的Series。

如果值也是None,那么这必须是嵌套字典或序列。

请参阅示例部分以获得这些示例。

value : scalar, dict, list, str, regex, 默认 None:

值,以替换与to_replace匹配的任何值。

对于DataFrame,

可以使用一组值来指定为每个列使用哪个值

(不属于该数据格式的列将不会被填充)。

这些对象的正则表达式、字符串和列表或字典也是允许的。

inplace :bool, 默认 False

如果是真的,在适当的地方。

注意:这将修改这个对象上的任何其他视图(例如,

DataFrame中的一个列)。如果为真,则返回调用者。

limit : int, 默认None

最大大小间隔,用于向前填充或向后填充。

自版本 2.1.0 起已弃用。

regex :bool或与to_replace相同的类型, 默认False

是否将to_replace/value解释为正则表达式。

如果这是True,那么to_replace必须是一个字符串。

也可以是正则表达式或正则表达式的列表、dict或数组,

在这种情况下to_replace必须为None

method :{'pad', 'ffill', 'bfill', None}

当用于替换时,当to_replace是标量时,

列表或元组,值为None时使用的方法。

在版本0.23.0中更改:添加到DataFrame中。

返回值:

DataFrame

更换后的对象。

Raises:

AssertionError

如果regex不是bool, to_replace不是None

TypeError

1)如果to_replace是一个dict

而值不是listdictndarraySeries

2)如果to_replaceNone

并且regex不能编译为正则表达式,

或者是listdictndarraySeries

3)替换多个booldatetime64对象时,

to_replace的参数与被替换值的类型不匹配

ValueError

如果一个列表或一个ndarray被传递给

to_replacevalue

但是它们的长度不相同。

Notes

1) 正则表达式替换在底层使用re.sub执行。替换re.sub的规则是相同的。

2) 正则表达式将只替换字符串,这意味着您不能提供匹配浮点数的正则表达式,也不能期望框架中具有数字dtype的列被匹配。但是,如果这些浮点数是字符串,那么您可以这样做。

3) 这个方法有很多选项。我们鼓励您试验和尝试这种方法,以获得它如何工作的直觉。

4) 当使用dict作为to_replace值时,就像dict中的键是to_replace部分,而dict中的值是值参数一样。

例子,

1)替换单个值

import pandas as pd

# 创建 DataFrame
data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data)

# 替换值
df_replaced = df.replace(1, 100)

print(df_replaced)

2)替换多个值

import pandas as pd

# 创建 DataFrame
data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data)

# 替换多个值
df_replaced = df.replace({1: 100, 4: 400})

print(df_replaced)

3)替换多个值和不同列

import pandas as pd

# 创建 DataFrame
data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data)

# 替换多个值并指定不同的列
df_replaced = df.replace({'A': {1: 100, 2: 200},
'B': {4: 400}})

print(df_replaced)

4)使用正则表达式替换

import pandas as pd

# 创建带有字符串的 DataFrame
df = pd.DataFrame({'A': ['apple', 'banana',
'cherry'], 'B': ['fruit', 'fruit', 'fruit']})

# 使用正则表达式替换
df_replaced = df.replace(r'apple', 'orange', 
regex=True)

print(df_replaced)

5)就地替换

import pandas as pd
df = pd.DataFrame({'A': [1,1,2,1], 'B': ['foo','foo','bar','foo']})
# 就地替换
df.replace(1, 100, inplace=True)

print(df)

推荐阅读
cjavapy编程之路首页