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

如何将两个DataFrame对应列逐一绘制散点图并解决尺寸不匹配错误?

问题解决方法

首先,你的代码存在两个核心问题:

  1. DataFrame定义错误:创建df_A和df_B时,你误用了小写的a和b,但字典变量名是大写的A和B,这会直接触发NameError,先修正这一点:

    import pandas as pd
    import matplotlib.pyplot as plt
    import numpy as np  # 需要导入numpy来识别nan
    
    A = {'col1': [20, 3, 45.6, 2, 500, 3e45, np.nan], 'col2': [np.nan, 90, 1e3, np.nan, 78, 6, np.nan],'col3':[25, 7e56, np.nan, np.nan, 23, 0.4, 78.04]}
    B = {'a': [1, 24, 30, np.nan, np.nan, 56, 2.5], 'b': [100, np.nan, 10, 78.09, 1e29, 0.84, np.nan],'c': [np.nan, 4.6, np.nan, np.nan, 9e45, 0.2, np.nan] }
    df_A = pd.DataFrame(data=A)  # 修正为大写A
    df_B = pd.DataFrame(data=B)  # 修正为大写B
    
  2. 列名不匹配导致索引错误:df_A的列名是col1/col2/col3,而df_B的列名是a/b/c,你循环时用df_A的列名去索引df_B,自然找不到对应列,进而引发数据尺寸不匹配的错误。要实现“第1列对第1列、第2列对第2列”的配对,需要按列的顺序关联两个DataFrame的列。

正确代码实现

下面是两种可行写法,都会处理NaN值(避免散点图忽略无效数据的警告),并设置正确的坐标轴标签:

方法一:按列的位置索引配对

for i in range(len(df_A.columns)):
    # 获取对应位置的列名
    x_col = df_A.columns[i]
    y_col = df_B.columns[i]
    # 合并两列并过滤掉含NaN的行
    valid_data = pd.concat([df_A[x_col], df_B[y_col]], axis=1).dropna()
    # 绘制单独的散点图
    plt.figure()
    plt.scatter(valid_data[x_col], valid_data[y_col])
    plt.xlabel(x_col)
    plt.ylabel(y_col)
    plt.title(f"Scatter Plot: {x_col} vs {y_col}")
    plt.show()

方法二:用zip打包列名配对

# 按顺序打包两个DataFrame的列名
for col_a, col_b in zip(df_A.columns, df_B.columns):
    # 过滤掉含NaN的行,确保x/y数据长度一致
    valid_data = df_A[[col_a]].join(df_B[[col_b]]).dropna()
    # 绘制散点图
    plt.figure()
    plt.scatter(valid_data[col_a], valid_data[col_b])
    plt.xlabel(col_a)
    plt.ylabel(col_b)
    plt.title(f"Scatter Plot: {col_a} vs {col_b}")
    plt.show()

关键说明

  • 用dropna()过滤含NaN的行,确保散点图的x、y数据长度完全匹配,从根源解决尺寸不匹配问题。
  • 每个配对生成单独的图(plt.figure()),如果想把所有散点图画在同一张图里,可以去掉plt.figure()和plt.show(),添加label参数后最后调用plt.legend()统一展示图例。

内容的提问来源于stack exchange,提问作者Viky E.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 05:48:06