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

