Pandas str 替换删除整个值而不是替换

Posted

技术标签:

【中文标题】Pandas str 替换删除整个值而不是替换【英文标题】:Pandas str replace dropping entire value instead of replacing 【发布时间】:2022-01-13 08:29:53 【问题描述】:

有一种行为,我不明白为什么会发生。

# Make a dataframe with a column of floats
df = pd.DataFrame(columns=['col1'])
df.loc[0] = 10.0
df.loc[1] = 5.0
df.loc[2] = 6.0
df.loc[3] = 20.0

# Convert the column to string
df['col1'] = df['col1'].astype(str)

# Use .str.replace to replace the decimal points of .0 with nothing
df['col1'].str.replace('.0', '')

但这会为第一个和最后一个值返回一个空字符串 0 1 5 2 6 3 名称:col1,数据类型:对象

但是这样做:

# Apply replace in a lambda function
df['col1'].apply(lambda x: x.replace('.0', ''))

这会返回预期的结果 0 10 1 5 2 6 3 20 名称:col1,数据类型:对象

这是否与将 0.0 与 .0 混淆?

知道为什么会这样吗?

【问题讨论】:

【参考方案1】:

因为. 是特殊的正则表达式字符,所以需要对其进行转义或添加regex=False

df['col2'] = df['col1'].str.replace('\.0', '', regex=True)
df['col3'] = df['col1'].str.replace('.0', '', regex=False)
print (df)
   col1 col2 col3
0  10.0   10   10
1   5.0    5    5
2   6.0    6    6
3  20.0   20   20

【讨论】:

有道理!两者的区别在于 Pandas str.replace 函数接受正则表达式,而标准字符串替换函数不接受

以上是关于Pandas str 替换删除整个值而不是替换的主要内容,如果未能解决你的问题,请参考以下文章

Thymeleaf:添加到现有值而不是替换它们

Thymeleaf:添加到现有值而不是替换它们

替换 window.history.replaceState 中的值而不是添加到其中

pandas 替换(擦除)字符串中的不同字符

用 pandas str.replace 替换多个子字符串值

用一个值替换 Pandas 系列中的多个子字符串