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

AWS Glue Python Shell作业中CSV文件Infinity与NaN值无法转换为0.0的问题求助

解决AWS Glue Python Shell中Pandas无法转换Infinity值的问题

这个问题的核心原因是在Glue环境中,Pandas读取CSV时将"Infinity"识别为字符串(而非本地环境中的浮点型np.inf),导致你的替换逻辑只匹配了数值型的无穷值,对字符串形式的"Infinity"无效,同时列的dtype变成了object而非float64。

下面是几个针对性的解决思路:

方案1:读取时将列强制转换为数值类型

使用pd.to_numeric将object类型的列转换为数值类型,它会自动把字符串形式的"Infinity"/"-Infinity"转为np.inf,无法识别的非数值转为NaN,之后再处理无穷值和空值:

import pandas as pd
import numpy as np

df = pd.read_csv('s3://bucket/test.csv')
# 转换C1列为数值类型,errors='coerce'将无效值转为NaN
df['C1'] = pd.to_numeric(df['C1'], errors='coerce')
# 替换正负无穷为NaN
df.replace([np.inf, -np.inf], np.nan, inplace=True)
# 填充NaN为0.0
df.fillna(0.00, inplace=True)
print(df['C1'])

方案2:替换时同时匹配字符串和数值型的无穷值

直接在replace中加入字符串形式的"Infinity"和"-Infinity",覆盖两种可能的无穷值表现形式:

import pandas as pd
import numpy as np

df = pd.read_csv('s3://bucket/test.csv')
# 同时匹配数值型和字符串型的正负无穷
df.replace([np.inf, -np.inf, 'Infinity', '-Infinity'], np.nan, inplace=True)
# 填充NaN为0.0
df.fillna(0.00, inplace=True)
print(df['C1'])

方案3:读取CSV时直接指定无穷值为NaN

在pd.read_csv中通过na_values参数,将字符串形式的"Infinity"/"-Infinity"直接识别为NaN,后续只需填充空值即可:

import pandas as pd
import numpy as np

# 读取时把指定字符串当作NaN处理
df = pd.read_csv('s3://bucket/test.csv', na_values=['Infinity', '-Infinity'])
# 填充所有NaN为0.0
df.fillna(0.00, inplace=True)
print(df['C1'])

额外排查点

你可以检查本地和Glue环境的Pandas版本是否一致:

print(pd.__version__)

不同版本的Pandas对CSV中"Infinity"的解析逻辑可能有差异,旧版本可能默认不自动解析字符串无穷值为数值类型,这也是导致问题的潜在原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 11:27:29