使用 lambda 以字符串开头时替换 DataFrame 列中的值

McR*_*Rae 3 lambda replace startswith apply pandas

我有一个数据框:

import pandas as pd
import numpy as np
x = {'Value': ['Test', 'XXX123', 'XXX456', 'Test']}
df = pd.DataFrame(x)
Run Code Online (Sandbox Code Playgroud)

我想使用 lambda 用 np.nan 替换以 XXX 开头的值。

我尝试了很多替换、应用和映射的方法,我能做的最好的是 False, True, True, False。

下面的工作,但我想知道一个更好的方法来做到这一点,我认为应用,替换和 lambda 可能是一个更好的方法来做到这一点。

df.Value.loc[df.Value.str.startswith('XXX', na=False)] = np.nan
Run Code Online (Sandbox Code Playgroud)

Rou*_*han 5

使用应用方法

In [80]: x = {'Value': ['Test', 'XXX123', 'XXX456', 'Test']}
In [81]: df = pd.DataFrame(x)
In [82]: df.Value.apply(lambda x: np.nan if x.startswith('XXX') else x)
Out[82]:
0    Test
1     NaN
2     NaN
3    Test
Name: Value, dtype: object
Run Code Online (Sandbox Code Playgroud)

apply, where, loc 的性能比较 在此处输入图片说明


ank*_*_91 5

np.where()在这里表现得更好:

df.Value=np.where(df.Value.str.startswith('XXX'),np.nan,df.Value)
Run Code Online (Sandbox Code Playgroud)

性能与应用在较大的 dfs 上的比较:

在此输入图像描述