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

Pandas分箱后调用np.unique报错:float与Interval无法比较

问题:分箱后提取唯一区间时出现类型不匹配错误

我在处理DataFrame数据时,按2单位间隔对i_h100列分箱,再提取生成的所有唯一区间列表。代码如下:

df = gpd.read_file(file)
final = df[df['i_h100']>=0] 
final['H_bins']=pd.cut(x=final['i_h100'], bins=np.arange(0, 120+2, 2))
HBins = list(np.unique(final['H_bins']))

多数DataFrame运行正常,但偶尔会出现如下错误:

Traceback (most recent call last):

File "/var/folders/bg/5n2pqdj53xv1lm099dt8z2lw0000gn/T/ipykernel_2222/1548505304.py", line 1, in <cell line: 1>
HBins = list(np.unique(final['H_bins']))

File "<__array_function__ internals>", line 180, in unique

File "/Users/heatherkay/miniconda3/envs/gpd/lib/python3.9/site-packages/numpy/lib/arraysetops.py", line 272, in unique
ret = _unique1d(ar, return_index, return_inverse, return_counts)

File "/Users/heatherkay/miniconda3/envs/gpd/lib/python3.9/site-packages/numpy/lib/arraysetops.py", line 333, in _unique1d
ar.sort()

TypeError: '<' not supported between instances of 'float' and 'pandas._libs.interval.Interval'

错误原因

报错核心是final['H_bins']列同时存在两种类型的数据:pandas.Interval(正常分箱结果)和float(即NaN值)。当pd.cut遇到超出设定bins范围的数值,或者原i_h100列存在NaN时,会生成NaN填充对应的H_bins行。numpy的unique方法在排序去重时,无法对float和Interval两种不同类型的数据做比较,因此抛出错误。

解决方法

方法1:改用pandas自带的unique方法

pandas的Series.unique()可以正确处理包含NaN的Interval列,无需类型转换:

HBins = list(final['H_bins'].unique())

方法2:提前清理数据或调整分箱范围

  • 过滤原数据中的NaN值,确保分箱的列无缺失:
final = df[(df['i_h100']>=0) & (~df['i_h100'].isna())]
final['H_bins']=pd.cut(x=final['i_h100'], bins=np.arange(0, 120+2, 2))
HBins = list(np.unique(final['H_bins']))
  • 动态调整分箱上限,确保覆盖所有数据:
final = df[df['i_h100']>=0]
max_val = final['i_h100'].max()
final['H_bins']=pd.cut(x=final['i_h100'], bins=np.arange(0, max_val + 2, 2))
HBins = list(np.unique(final['H_bins']))

方法3:提取后过滤NaN

如果需要保留分箱结果中的NaN,但只想获取有效区间列表:

HBins = [bin_interval for bin_interval in final['H_bins'].unique() if pd.notna(bin_interval)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 21:10:33