使用pandas导入CSV文件时如何保留+inf前的加号
原因说明
pandas 调用read_csv时默认会自动推断每列的数据类型,+inf、-inf会被识别为浮点数类型的正、负无穷特殊值。Python 及底层依赖的 numpy 对正无穷浮点数的标准字符串表示就是inf,默认省略正号,只有负无穷-inf会保留负号,因此读取后会出现+inf前置加号丢失的现象——本质是该列已经被转换为浮点类型,不存在作为字符串的前置+字符。
解决方案
根据后续使用场景的不同,可选择以下两种方案:
- 若需要完整保留原始CSV的文本内容,直接指定对应列按字符串类型读取即可,这是最稳妥、对其他列影响最小的方案:
import pandas as pd # 仅指定lower、upper两列为字符串类型,其余列保持默认自动类型推断 df = pd.read_csv('rules.csv', dtype={'lower': str, 'upper': str}) for i, r in df.iterrows(): low = r['lower'] high = r['upper'] print(low, high)
运行后输出如下,可完整保留+inf格式:
-inf 2.1 2.1 +inf
- 若后续需要基于上下界做数值比较、区间判断等计算,不建议读取时就保留字符串类型,否则会额外增加类型转换成本。更合理的方式是读取时保持默认浮点类型用于计算,仅在需要输出、展示规则时做格式化补全正号即可:
import pandas as pd df = pd.read_csv('rules.csv') def format_bound(val): if val == float('inf'): return '+inf' if val == float('-inf'): return '-inf' return str(val) for i, r in df.iterrows(): low = format_bound(r['lower']) high = format_bound(r['upper']) print(low, high)
不推荐通过全局关闭特殊值识别(如设置
na_filter=False)的方式实现需求,该操作会同时影响空值、其他特殊浮点值的自动转换,容易引入非预期的类型问题。
内容的提问来源于stack exchange,提问作者Moataz Imad
相关产品推荐
相关产品推荐

