在Jupyter Notebook中使用Seaborn pointplot()遇data参数多值错误求助
问题解决:Seaborn pointplot 报 TypeError: got multiple values for argument 'data'
错误原因
调用sns.pointplot("index",0,data=miss_previous_application,hue="type")时参数传递逻辑出错:
- 当前Seaborn版本中,
pointplot的位置参数顺序为x, y, data, ...,你传入的第二个参数0被错误匹配到data参数位置,而后续又显式指定了data=miss_previous_application,导致data参数被重复赋值,触发TypeError。 - 另外,DataFrame中数值列的列名为整数
0,直接用位置传参容易引发参数匹配混乱。
解决方案
方案1:用关键字参数明确x、y列
直接修改pointplot调用方式,避免位置传参的歧义:
fig = plt.figure(figsize=(18,6)) miss_previous_application = pd.DataFrame((previous_application.isnull().sum())*100/previous_application.shape[0]).reset_index() miss_previous_application["type"] = "previous_application" # 显式指定x、y对应的列 ax = sns.pointplot(x="index", y=0, data=miss_previous_application, hue="type") plt.xticks(rotation=90, fontsize=7) plt.title("Percentage of Missing values in previous_application") plt.ylabel("PERCENTAGE") plt.xlabel("COLUMNS") ax.set_facecolor("k") fig.set_facecolor("lightgrey")
方案2:创建DataFrame时命名列(更易维护)
给DataFrame的列添加语义化名称,彻底避免整数列名的问题:
fig = plt.figure(figsize=(18,6)) # 显式指定列名,将缺失值百分比列命名为MISS_PERCENT miss_previous_application = pd.DataFrame( (previous_application.isnull().sum())*100/previous_application.shape[0], columns=["MISS_PERCENT"] ).reset_index() # 将原index列重命名为COLUMN,语义更清晰 miss_previous_application.rename(columns={"index": "COLUMN"}, inplace=True) miss_previous_application["type"] = "previous_application" # 使用命名后的列调用pointplot ax = sns.pointplot(x="COLUMN", y="MISS_PERCENT", data=miss_previous_application, hue="type") plt.xticks(rotation=90, fontsize=7) plt.title("Percentage of Missing values in previous_application") plt.ylabel("PERCENTAGE") plt.xlabel("COLUMNS") ax.set_facecolor("k") fig.set_facecolor("lightgrey")
内容的提问来源于stack exchange,提问作者jislesplr
相关产品推荐
相关产品推荐

