Python替换数据帧字符串中的整个值,而不是子字符串

2024-06-17 15:23:16 发布

您现在位置:Python中文网/ 问答频道 /正文

如果整个字符串等于另一个字符串,我试图替换数据帧中的字符串。我不想替换子字符串。在

所以:

如果我有df:

 Index  Name       Age
   0     Joe        8
   1     Mary       10
   2     Marybeth   11

当整个字符串匹配“Mary”和“Amy”时,我想替换“Mary”,所以我得到

^{pr2}$

我正在做以下工作:

df['Name'] = df['Name'].apply(lambda x: x.replace('Mary','Amy'))

通过搜索我的理解是replacesetregex=False和{}的默认值应该是将数据帧中的整个值查找为“Mary”。相反,我得到的结果是:

 Index  Name       Age
   0     Joe        8
   1     Amy        10
   2     Amybeth   11

我做错什么了?在


Tags: 数据lambda字符串namedfageindexreplace
3条回答

replace+dict是正确的方法(对于DataFrame,您使用的是Series.str.replace

df['Name'].replace({'Mary':'Amy'})
Out[582]: 
0         Joe
1         Amy
2    Marybeth
Name: Name, dtype: object
df['Name'].replace({'Mary':'Amy'},regex=True)
Out[583]: 
0        Joe
1        Amy
2    Amybeth
Name: Name, dtype: object

注意它们是不同的

Serieshttps://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.str.replace.html

DataFramehttps://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.replace.html

说明:

当你像这样应用它-你是在处理字符串,而不是熊猫系列:

In [42]: df['Name'].apply(lambda x: print(type(x)))
<class 'str'>  # <   NOTE
<class 'str'>  # <   NOTE
<class 'str'>  # <   NOTE
Out[42]:
0    None
1    None
2    None
Name: Name, dtype: object

它的意思是:

^{pr2}$

解决方案:

正确使用Series.replace(to_replace=None, value=None, inplace=False, limit=None, regex=False, method='pad', axis=None)(不使用Series.apply())-根据默认值(regex=False),它将替换整个字符串-正如您预期的那样:

In [39]: df.Name.replace('Mary','Amy')
Out[39]:
0         Joe
1         Amy
2    Marybeth
Name: Name, dtype: object

您可以显式指定regex=True,这将替换子字符串:

In [40]: df.Name.replace('Mary','Amy', regex=True)
Out[40]:
0        Joe
1        Amy
2    Amybeth
Name: Name, dtype: object

注意:Series.str.replace(pat, repl, n=-1, case=None, flags=0)没有regex参数-它总是将pat和{}视为RegEx:

In [41]: df.Name.str.replace('Mary','Amy')
Out[41]:
0        Joe
1        Amy
2    Amybeth
Name: Name, dtype: object

您还可以使用loc来定位名称完全匹配的实例,然后设置为新名称。在

df.loc[df['Name'] == 'Mary', 'Name'] = "Amy"

相关问题 更多 >