You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas DataFrame中仅替换单独'-'而不改动科学计数法内容

解决Pandas中仅替换单独'-'并转换为float的问题

这个需求我之前处理过,关键就是要精准定位只包含单个'-'的单元格,不能误伤像'1E-06'这类字符串里的连字符。这里有两种简单高效的方法:

方法一:用pandas的replace方法(推荐,更直观)

Pandas的Series.replace()方法默认是匹配整个元素值,而不是子字符串,所以直接传一个字典就能完美实现需求:

import pandas as pd

# 示例DataFrame
df = pd.DataFrame({'col': ['-', '1E-06', '3.14', '-', '5E-09']})

# 仅替换完全等于'-'的元素为'1000'
df['col'] = df['col'].replace({'-': '1000'})

# 转换为float类型
df['col'] = df['col'].astype(float)

这种方法不需要写正则,代码更简洁,完全不会影响'1E-06'里的'-'。

方法二:用str.replace搭配正则表达式

如果你更习惯用字符串处理的方式,可以用正则表达式匹配**整个单元格仅为'-'**的情况,正则式^-$表示“从字符串开头到结尾只有一个'-'”:

df['col'] = df['col'].str.replace(r'^-$', '1000', regex=True)
df['col'] = df['col'].astype(float)

这里的regex=True是必须的,否则会把所有'-'都替换掉,就会出现你担心的'1E-06'变成'1E100006'的问题。

测试结果

运行上述代码后,示例DataFrame的输出会是:

col
0  1000.000000
1     0.000001
2     3.140000
3  1000.000000
4     0.000000005

可以看到单独的'-'都被替换成了1000,科学计数法的字符串也成功转换成了对应的float数值。

内容的提问来源于stack exchange,提问作者MarcoC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:12:44