我有一个由我的 python 代码读取的 csv,并且使用 pandas 创建了一个数据框。
CSV 文件格式如下
1 1.0
2 99.0
3 20.0
7 63
我的代码计算百分位数并希望找到第二列中的值大于 60 的所有行。
df = pd.read_csv(io.BytesIO(body), error_bad_lines=False, header=None, encoding='latin1', sep=',')
percentile = df.iloc[:, 1:2].quantile(0.99) # Selecting 2nd column and calculating percentile
criteria = df[df.iloc[:, 1:2] >= 60.0]
虽然我的百分位数代码工作正常,但查找第 2 列的值大于 60 的所有行的条件返回
NaN NaN
NaN NaN
NaN NaN
NaN NaN
你能帮我找出错误吗?
原文由 Adi 发布,翻译遵循 CC BY-SA 4.0 许可协议
只需更正标准内的条件即可。作为第二列“1”,您应该编写 df.iloc[:,1]。
例子:
为什么?原因似乎存在于条件的定义类型中。让我们检查一下
情况1:
返回 pandas.core.series.Series ,
所以它给了
案例2:
返回一个 pandas.core.frame.DataFrame
,并给出
因此我认为它改变了索引的处理方式。
永远记住 3 是一个标量,而 3:4 是一个数组。
有关更多信息,最好查看官方文档 Pandas indexing