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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:05:32