熊猫对所有掩码值的replace()

时间:2019-06-26 07:37:03

标签: python pandas

我想在m中所有掩码值df上将'bee'替换为'ass'。

import pandas as pd

data = {'Data1':[899, 900, 901, 902],
        'Data2':['as-bee', 'be-bee', 'bee-be', 'bee-as']}

df = pd.DataFrame(data)

   Data1   Data2
0    899  as-bee
1    900  be-bee
2    901  bee-be
3    902  bee-as

wrong = {'Data1':[900,901]}

df1 = pd.DataFrame(wrong)

   Data1
0    900
1    901

m = df['Data1'].isin(wrong['Data1'])

df[m]['Data2'].apply(lambda x: x.replace('bee','aas'))

1    be-aas
2    aas-be
Name: Data2, dtype: object

它返回所需的更改,但df中的值未更改。进行df[m]['Data2']=df[m]['Data2'].apply(lambda x: x.replace('bee','aas'))也无济于事,因为它会返回错误。

1 个答案:

答案 0 :(得分:2)

IIUC,您可以使用

Method1 df.loc[]

m=df.Data1.isin(df1.Data1) # boolean mask
df.loc[m,'Data2']=df.loc[m,'Data2'].replace('bee','ass',regex=True)
print(df)

方法2: np.where()

m=df.Data1.isin(df1.Data1)
df.Data2=np.where(m,df.Data2.replace('bee','ass',regex=True),df.Data2)
print(df)

   Data1   Data2
0    899  as-bee
1    900  be-ass
2    901  ass-be
3    902  bee-as