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

调用字典中pandas DataFrame序列绘制散点图时触发AttributeError

问题根源:ax 参数传错了类型

你遇到的 AttributeError: 'int' object has no attribute 'scatter' 根本原因不是你的Series类型有问题,而是你给 sns.scatterplot() 的 ax 参数传了整数 0 —— seaborn的这个参数需要接收的是matplotlib的Axes对象,而不是普通整数,所以Python把0当成了int类型,自然找不到scatter方法。

方案1:不指定ax,让seaborn自动创建绘图区域

如果不需要自定义子图布局,直接去掉ax=0参数就行,代码修改后如下:

import pandas as pd
import seaborn as sns

df1 = pd.DataFrame([[1,2], [3,4]], columns = ['A', 'B'])
df_dict = {'df1': df1}  # 变量名改了下,避免和pandas的DataFrame重名,更清晰

for i in df_dict.values():
    sns.scatterplot(x=i['A'], y=i['B'])

运行这段代码就能正常生成散点图了。

方案2:手动创建Axes对象再传入ax参数

如果需要指定绘图的Axes(比如在子图中绘制),可以先通过matplotlib创建Axes对象,再传给ax:

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

df1 = pd.DataFrame([[1,2], [3,4]], columns = ['A', 'B'])
df_dict = {'df1': df1}

# 创建一个Axes对象
fig, ax = plt.subplots()

for i in df_dict.values():
    sns.scatterplot(x=i['A'], y=i['B'], ax=ax)

plt.show()

这样也能正确生成散点图,而且你可以通过fig和ax进一步自定义图表的样式、标题等。

另外补充一点:你原来的变量名df和pandas的DataFrame类名太像了,建议改成df_dict这种更清晰的名字,避免潜在的命名冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:59:49