pandas 将长十进制字符串转换为“-inf”

pandas converts long decimal string into "-inf"

我有一个 CSV,其中浮点值表示为长十进制字符串(-1 后跟 342 个 0)。示例如下:

ID,AMOUNT
"id_1","-1.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"

问题是,当读入 pandas (0.25) DataFrame 时,该值会自动转换为 -inf:

>>> pd.read_csv('/path/to/file.csv')['AMOUNT']
0   -inf
Name: AMOUNT, dtype: float64

如果我将 CSV 中的值更改为 "-1.0",它会按预期正常工作。奇怪的是,关于字符串的长度似乎有一个最佳点。如果我手动将字符串截断为仅 308 个 0,它会将值正确读取为 -1.0:

# when value is "-1.0" or "-1." followed by 308 0's
>>> pd.read_csv('/path/to/file.csv')['AMOUNT']
0   -1.0
Name: AMOUNT, dtype: float64

虽然理想的解决方案是确保在我们处理之前在源本身中截断该值。但与此同时,这种行为的原因是什么? and/or 有解决办法吗?

我们目前使用的是 Python 3.6 和 Pandas 0.25

一种解决方法可能是将列作为字符串读入,然后使用内置的 float 函数截断尾随零。

df = pd.read_csv("/path/to/file.csv", dtype="string")
df['AMOUNT'] = df['AMOUNT'].apply(lambda x: float(x))