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

Pandas处理DataFrame报float对象无between属性错误如何解决

问题解决方法

错误原因

  • 你遍历df['col1']得到的i是Python原生浮点数值,float类型没有between方法,这是报错的直接原因:between是Pandas Series/Index对象专属的方法,不能用在单个数值上。
  • 你的遍历逻辑存在多处问题:
    1. df['col2'].value_counts()返回的是每个区间的样本计数,循环取到的j是整数类型的计数值,不是你要判断的区间范围
    2. 代码中使用的inter_list未定义,即便跳过前一步也会触发名称错误

正确实现方案

pd.cut本身支持直接传入labels参数,不需要自己写循环做匹配,一步就能得到你要的标签结果。如果你要使用自定义的区间和对应标签,直接定义bins分组边界即可,实现代码如下:

import pandas as pd

l2=[29.69911764705882, 32.5, 32.5, 54.0, 12.0, 29.69911764705882, 24.0, 29.69911764705882, 45.0, 33.0, 20.0, 47.0, 29.0,
    25.0, 23.0, 19.0, 37.0, 16.0, 24.0, 29.69911764705882, 22.0, 24.0, 19.0, 18.0, 19.0, 27.0, 9.0, 36.5, 42.0, 51.0, 22.0,
    55.5, 40.5, 29.69911764705882, 51.0, 16.0, 30.0, 29.69911764705882, 29.69911764705882, 44.0, 40.0, 26.0, 17.0, 1.0, 9.0,
    29.69911764705882, 45.0, 29.69911764705882, 28.0, 61.0, 4.0, 1.0, 21.0, 56.0, 18.0, 29.69911764705882, 50.0, 30.0, 36.0,
    29.69911764705882, 29.69911764705882, 9.0, 1.0, 4.0, 29.69911764705882, 29.69911764705882, 45.0, 40.0, 36.0, 32.0, 19.0,
    19.0, 3.0, 44.0, 58.0, 29.69911764705882, 42.0, 29.69911764705882, 24.0, 28.0, 29.69911764705882, 34.0, 45.5, 18.0, 2.0,
    32.0, 26.0, 16.0, 40.0, 24.0, 35.0, 22.0, 30.0, 29.69911764705882, 31.0, 27.0, 42.0, 32.0, 30.0, 16.0, 27.0, 51.0, 
    29.69911764705882, 38.0, 22.0, 19.0, 20.5, 18.0, 29.69911764705882, 35.0, 29.0, 59.0, 5.0, 24.0, 29.69911764705882, 
    44.0, 8.0, 19.0, 33.0, 29.69911764705882, 29.69911764705882, 29.0, 22.0, 30.0, 44.0, 25.0, 24.0, 37.0, 54.0, 
    29.69911764705882, 29.0, 62.0, 30.0, 41.0, 29.0, 29.69911764705882, 30.0, 35.0, 50.0, 29.69911764705882, 3.0]
df = pd.DataFrame({'col1': l2})

# 自定义分组区间,顺序从小到大,和标签一一对应
custom_bins = [0,7,13,19,25,31,37,43,49,55,62]
labels = ['0-7','7-13','13-19','19-25','25-31','31-37','37-43','43-49','49-55','55-62']

# 直接生成标签列,include_lowest=True保证最小值被包含进第一个区间
df['col2'] = pd.cut(df['col1'], bins=custom_bins, labels=labels, include_lowest=True)

# 直接转成目标列表
new_list = df['col2'].tolist()
print(new_list)

如果你需要用自动分10组的逻辑,不需要自定义区间,也可以直接读取pd.cut返回的分类编码映射标签,不需要循环判断:

# 自动分10组
df['col2'] = pd.cut(df['col1'], 10)
# 获取自动生成的区间顺序,调整你的labels顺序和它对应后直接映射
auto_bin_order = df['col2'].cat.categories.tolist()
# 把你的labels按auto_bin_order的顺序调整后执行映射
adjusted_labels = ['对应第一个区间标签','对应第二个区间标签', ...] # 按实际顺序替换
new_list = [adjusted_labels[x] for x in df['col2'].cat.codes]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:09:03