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

解决pandas.Int64Index弃用警告并维持数值类别排序逻辑

解决Pandas Int64Index弃用警告并保留原有排序逻辑

要解决弃用警告同时保留原有排序逻辑,核心是替换过时的pd.Int64Index类型判断,改用Pandas提供的类型检测API来识别数值型索引。以下是具体修改方案:

修改后的完整代码

import pandas as pd
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt

# 数据准备
data = sns.load_dataset('tips').iloc[0:5, [2,6]]

ncols = 2
nrows = int(np.ceil(data.shape[1] / ncols))

fig, axes = plt.subplots(nrows=nrows, ncols=ncols,
                         figsize=(4*ncols, 3*nrows), sharex=True)

for ax, (name, g) in zip(axes.ravel(), data.items()):
    z = g.value_counts(normalize=True, ascending=True) * 100
    # 替换原有判断,识别所有数值型索引(int/float都适配)
    if pd.api.types.is_numeric_dtype(z.index):
        z = z.sort_index(ascending=False)
    z.plot.barh(ax=ax)
    ax.title.set_text(name)

plt.tight_layout()
plt.show()

关键修改说明

  • 用pd.api.types.is_numeric_dtype(z.index)替代isinstance(z.index, (pd.Int64Index)):
    • 这个API可以准确识别整数、浮点数等所有数值类型的索引,完美适配你需要同时支持int和float的需求
    • 完全避免了pd.Int64Index的弃用警告,符合Pandas未来版本的规范
    • 原有排序逻辑完整保留:数值型变量按索引降序排序,分类变量保持频率从低到高的排列(对应横向条形图从下到上频率递增)

你之前尝试方案的问题解析

  1. 使用if isinstance(z.index, (int))::
    索引是pd.Index对象,不是单个int值,因此判断永远为False,不会执行数值型排序逻辑,导致数值变量也按频率排序,不符合预期。
  2. 使用if isinstance(z.index, (pd.Index(datatype='int64')))::
    pd.Index()是构造索引的方法,需要传入数据集合,不能直接用来判断类型,因此触发参数错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 13:20:30