如何在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
相关产品推荐
相关产品推荐

