用 pandas 列替换字符串的一部分作为模式
Replace part of a string with a pandas column as pattern
我想在 pandas 列上使用 .str.replace()
方法,但使用另一个 pandas 列作为模式
例如,
df = pd.DataFrame({'str1': ['abc','abcd','def'], 'str2': ['b','ab', 'ef']})
我想通过用空字符串替换 str1
中的 str2
字符串来构建新列 str1_replaced
。
这是我想要得到的结果:
str1 str2 str1_replaced
0 abc b ac
1 abcd ab cd
2 def ef d
我试过:
df['str1_replaced'] = df['str1'].str.replace(df['str2'],"")
但是我得到以下错误
TypeError: 'Series' objects are mutable, thus they cannot be hashed
有没有不使用 for 循环的方法来实现?我正在考虑使用 lambda 函数,但无法找到确切的操作方法。
尝试 apply
:
df['str1_replaced'] = df.apply(lambda x: x['str1'].replace(x['str2'], ''), axis=1)
>>> df
str1 str2 str1_replaced
0 abc b ac
1 abcd ab cd
2 def ef d
>>>
或尝试列表理解:
df['str1_replaced'] =[x.replace(y, '') for x, y in zip(df['str1'], df['str2'])]
我想在 pandas 列上使用 .str.replace()
方法,但使用另一个 pandas 列作为模式
例如,
df = pd.DataFrame({'str1': ['abc','abcd','def'], 'str2': ['b','ab', 'ef']})
我想通过用空字符串替换 str1
中的 str2
字符串来构建新列 str1_replaced
。
这是我想要得到的结果:
str1 str2 str1_replaced
0 abc b ac
1 abcd ab cd
2 def ef d
我试过:
df['str1_replaced'] = df['str1'].str.replace(df['str2'],"")
但是我得到以下错误
TypeError: 'Series' objects are mutable, thus they cannot be hashed
有没有不使用 for 循环的方法来实现?我正在考虑使用 lambda 函数,但无法找到确切的操作方法。
尝试 apply
:
df['str1_replaced'] = df.apply(lambda x: x['str1'].replace(x['str2'], ''), axis=1)
>>> df
str1 str2 str1_replaced
0 abc b ac
1 abcd ab cd
2 def ef d
>>>
或尝试列表理解:
df['str1_replaced'] =[x.replace(y, '') for x, y in zip(df['str1'], df['str2'])]