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

Databricks中Seaborn 0.11.2绘图报错且无法改版本的解决办法

解决Databricks中Seaborn 0.11.2绘制直方图的OptionError问题

问题描述

在Databricks环境运行以下代码创建直方图时,反复报错OptionError: "No such keys(s): 'mode.use_inf_as_null'",且无法修改或重新安装Seaborn(0.11.2版本)及相关依赖版本:

import matplotlib.pyplot as plt
import pandas as pd
import random
import seaborn as sns

random.seed(2023)  # 保证每次生成相同的图
x = [random.randrange(100) for _ in range(100)]
y = [random.randrange(100) for _ in range(100)]

df = pd.concat(axis=0, ignore_index=True, objs=[
    pd.DataFrame.from_dict({'value': x, 'name': 'x'}),
    pd.DataFrame.from_dict({'value': y, 'name': 'y'})
])

fig, ax = plt.subplots()
sns.histplot(
    data=df, x='value', hue='name', multiple='dodge',
    bins=range(1, 110, 10), ax=ax
)

sns.move_legend(ax, bbox_to_anchor=(1, 0.5), loc='center left', frameon=False)

报错信息:

OptionError: "No such keys(s): 'mode.use_inf_as_null'"

原因分析

Seaborn 0.11.2会调用pandas中已被移除的mode.use_inf_as_null配置项,但当前Databricks环境的pandas版本较高,该配置已被废弃/删除,导致版本不兼容,且无法调整依赖版本。

可行解决办法

方法1:添加pandas配置兼容映射

在导入Seaborn前,给pandas的配置系统添加该废弃项的兼容映射,让Seaborn调用时不会报错:

import pandas as pd
# 给废弃配置项添加映射,指向当前有效的配置
pd._config.config._deprecated_options['mode.use_inf_as_null'] = 'mode.use_inf_as_na'

# 后续导入其他库并执行原代码
import matplotlib.pyplot as plt
import random
import seaborn as sns

random.seed(2023)
x = [random.randrange(100) for _ in range(100)]
y = [random.randrange(100) for _ in range(100)]

df = pd.concat(axis=0, ignore_index=True, objs=[
    pd.DataFrame.from_dict({'value': x, 'name': 'x'}),
    pd.DataFrame.from_dict({'value': y, 'name': 'y'})
])

fig, ax = plt.subplots()
sns.histplot(
    data=df, x='value', hue='name', multiple='dodge',
    bins=range(1, 110, 10), ax=ax
)

sns.move_legend(ax, bbox_to_anchor=(1, 0.5), loc='center left', frameon=False)

方法2:直接用Matplotlib实现相同效果

如果上述方法无效,绕过Seaborn直接使用Matplotlib绘制分组直方图,完全避开版本兼容问题:

import matplotlib.pyplot as plt
import pandas as pd
import random

random.seed(2023)
x = [random.randrange(100) for _ in range(100)]
y = [random.randrange(100) for _ in range(100)]

df = pd.concat(axis=0, ignore_index=True, objs=[
    pd.DataFrame.from_dict({'value': x, 'name': 'x'}),
    pd.DataFrame.from_dict({'value': y, 'name': 'y'})
])

fig, ax = plt.subplots()
# 提取分组数据
x_vals = df[df['name'] == 'x']['value']
y_vals = df[df['name'] == 'y']['value']
# 设置直方图区间
bins = range(1, 110, 10)
# 绘制分组直方图(dodge=True实现并列效果)
ax.hist([x_vals, y_vals], bins=bins, label=['x', 'y'], alpha=0.7, dodge=True)
# 设置图例位置
ax.legend(bbox_to_anchor=(1, 0.5), loc='center left', frameon=False)

plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 19:28:39