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 替换删除整个值而不是替换的主要内容,如果未能解决你的问题,请参考以下文章
替换 window.history.replaceState 中的值而不是添加到其中