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

Python中用.loc筛选末尾为.99的float列数据的问题

当然可以直接在.loc里实现所有判断逻辑,不用临时列。你之前的写法失效是因为错误地把整个Series转成了单一字符串,而不是逐元素处理。下面是两种可行的实现方式:

方法1:通过字符串逐元素匹配

利用Pandas Series的.str属性对每个元素单独转字符串并判断结尾:

filtered_df = df_official.loc[
    (df_official['price_duration_days'] >= 7) &
    (df_official['shop'].isin(official_stores)) &
    (df_official['Days From Release'] <= 3) &
    (df_official['y'].astype(str).str.endswith('.99'))
]

方法2:通过数值计算判断(更可靠)

浮点转字符串可能遇到科学计数法的问题,用数值运算判断小数部分更稳妥,注意用np.isclose避免浮点数精度误差:

import numpy as np

filtered_df = df_official.loc[
    (df_official['price_duration_days'] >= 7) &
    (df_official['shop'].isin(official_stores)) &
    (df_official['Days From Release'] <= 3) &
    (np.isclose(df_official['y'] - np.floor(df_official['y']), 0.99))
]

为什么之前的写法不行?

str(df_official.y)会把整个Series对象转换成一个描述性的字符串(比如类似"0 19.99\n1 25.50\nName: y, dtype: float64"),取[-3:]得到的是这个长字符串的最后三个字符,不是每个元素的小数部分,自然无法生成正确的布尔筛选数组,进而引发索引或键错误。

内容的提问来源于stack exchange,提问作者Prototype

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 21:22:05