使用pandas过滤xlsx/csv数据时触发TypeError报错的原因及解决方法
报错原因
- 直接触发报错的原因是代码中
["WindSpeed"] > 2的写法,是将Python列表类型和整数类型做大小比较,Python原生不支持该类操作,因此抛出TypeError。 - 逻辑层面的错误是pandas过滤行的语法使用错误:你需要先取出
WindSpeed列的Series对象,再和2做逐元素比较,生成布尔掩码后才能用来筛选DataFrame的行。使用[["WindSpeed"]]双括号取列返回的是DataFrame类型,哪怕你写对了取值逻辑,也不符合后续过滤的要求。
修正代码
标准分步写法
import pandas as pd df = pd.read_excel("Wind.xlsx") # 单括号取单列得到Series,逐元素比较生成布尔掩码 filter_mask = df["WindSpeed"] > 2 ew = df[filter_mask] print(ew)
简化合并写法
也可以将过滤逻辑合并为一行,写法更简洁:
import pandas as pd df = pd.read_excel("Wind.xlsx") ew = df[df["WindSpeed"] > 2] print(ew)
如果需要过滤后只保留指定列,用loc写法逻辑更清晰,示例如下:
# 过滤WindSpeed>2的行,仅保留WindSpeed、Timestamp两列 ew = df.loc[df["WindSpeed"] > 2, ["WindSpeed", "Timestamp"]]
内容的提问来源于stack exchange,提问作者Frederik N. Pedersen
相关产品推荐
相关产品推荐

