使用python-aqi库处理DataFrame中PM2.5的AQI时遇转换语法错误求助
解决python-aqi处理Pandas Series时报错InvalidOperation的问题
问题原因
aqi.to_iaqi函数仅支持单个数值的字符串/数值输入,你之前的代码把整个Pandas Series转成字符串传入(str(pmt_2_5)),生成的是Series的整体字符串表示(而非单个数值字符串),导致库无法解析为有效的Decimal类型,从而抛出InvalidOperation: [<class 'decimal.ConversionSyntax'>]错误。此外,若数据列存在非数值、空值等无效内容,也会触发该错误。
解决方案
1. 先清洗并验证数据
确保目标列是合法的数值类型,处理空值或无效值:
import aqi import pandas as pd # 读取数据 df_mush = pd.read_csv("book1.csv", parse_dates=["Date"], index_col="Date", sep=",") # 将列转换为数值类型,无效值转为NaN df_mush['mush-pm_2_5'] = pd.to_numeric(df_mush['mush-pm_2_5'], errors='coerce') # 可选:删除包含空值的行(或用fillna填充,比如df_mush['mush-pm_2_5'].fillna(0, inplace=True)) df_mush = df_mush.dropna(subset=['mush-pm_2_5'])
2. 对每个元素单独计算AQI
使用Pandas的apply方法,对Series中的每个数值单独调用aqi.to_iaqi:
# 定义AQI计算函数 def compute_aqi(pm_val): return aqi.to_iaqi(aqi.POLLUTANT_PM25, str(pm_val)) # 应用到目标列,生成新的AQI列 df_mush['aqi_pm25'] = df_mush['mush-pm_2_5'].apply(compute_aqi) # 查看结果 print(df_mush[['mush-pm_2_5', 'aqi_pm25']])
也可以用lambda函数简化:
df_mush['aqi_pm25'] = df_mush['mush-pm_2_5'].apply(lambda x: aqi.to_iaqi(aqi.POLLUTANT_PM25, str(x)))
验证说明
运行上述代码后,每个PM2.5数值会被单独转换为字符串传入aqi.to_iaqi,符合函数的输入要求,即可成功生成对应的AQI值。
内容的提问来源于stack exchange,提问作者Deeone
相关产品推荐
相关产品推荐

