使用 lambda 以字符串开头时替换 DataFrame 列中的值
Replace values in DataFrame column when they start with string using lambda
我有一个数据框:
import pandas as pd
import numpy as np
x = {'Value': ['Test', 'XXX123', 'XXX456', 'Test']}
df = pd.DataFrame(x)
我想使用 lambda 将以 XXX 开头的值替换为 np.nan。
我尝试了很多替换、应用和映射的方法,我能做的最好的是 False、True、True、False。
以下有效,但我想知道更好的方法,我认为应用、替换和 lambda 可能是更好的方法。
df.Value.loc[df.Value.str.startswith('XXX', na=False)] = np.nan
不需要使用.loc
。只写:
df.Value[df.Value.str.startswith('XXX')] = np.nan
如果您想计算一些,Lambda 函数可能是必需的
要替换的表达式。在这种情况下,np.nan
就足够了。
使用apply方法
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
apply,where,loc性能对比
np.where()
在这里表现得更好:
df.Value=np.where(df.Value.str.startswith('XXX'),np.nan,df.Value)
性能 vs 适用于更大的 dfs:
我有一个数据框:
import pandas as pd
import numpy as np
x = {'Value': ['Test', 'XXX123', 'XXX456', 'Test']}
df = pd.DataFrame(x)
我想使用 lambda 将以 XXX 开头的值替换为 np.nan。
我尝试了很多替换、应用和映射的方法,我能做的最好的是 False、True、True、False。
以下有效,但我想知道更好的方法,我认为应用、替换和 lambda 可能是更好的方法。
df.Value.loc[df.Value.str.startswith('XXX', na=False)] = np.nan
不需要使用.loc
。只写:
df.Value[df.Value.str.startswith('XXX')] = np.nan
如果您想计算一些,Lambda 函数可能是必需的
要替换的表达式。在这种情况下,np.nan
就足够了。
使用apply方法
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
apply,where,loc性能对比
np.where()
在这里表现得更好:
df.Value=np.where(df.Value.str.startswith('XXX'),np.nan,df.Value)
性能 vs 适用于更大的 dfs: