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

如何遍历Pandas DataFrame递增命名列并批量绘制X_n vs Y_n图?

解决方法

核心思路

遍历每个索引n,对DataFrame的每一行提取对应的X_n和Y_n列值,绘制两者的对比图(以散点图为例,可根据数据类型调整为折线图等)。以下分两种场景给出实现代码:


场景1:Y列包含Y_0(推测为输入笔误)

如果你的Y列实际是从Y_0到Y_1000,执行以下代码:

import pandas as pd
import matplotlib.pyplot as plt

# 假设你的DataFrame变量名为df
for n in range(1001):  # 覆盖0到1000的所有索引
    x_col = f"X_{n}"
    y_col = f"Y_{n}"
    
    # 遍历每一行数据
    for row_idx in df.index:
        x_val = df.loc[row_idx, x_col]
        y_val = df.loc[row_idx, y_col]
        plt.scatter(x_val, y_val, label=f"行{row_idx}")
    
    plt.xlabel(x_col)
    plt.ylabel(y_col)
    plt.title(f"{x_col} vs {y_col}")
    plt.legend()
    plt.show()
    # 若需批量保存图片,替换plt.show()为:plt.savefig(f"X{n}_vs_Y{n}.png")

场景2:Y列确实从Y_1开始(无Y_0)

如果Y列仅包含Y_1到Y_1000,调整遍历范围即可:

import pandas as pd
import matplotlib.pyplot as plt

for n in range(1, 1001):
    x_col = f"X_{n}"
    y_col = f"Y_{n}"
    
    for row_idx in df.index:
        x_val = df.loc[row_idx, x_col]
        y_val = df.loc[row_idx, y_col]
        plt.scatter(x_val, y_val, label=f"行{row_idx}")
    
    plt.xlabel(x_col)
    plt.ylabel(y_col)
    plt.title(f"{x_col} vs {y_col}")
    plt.legend()
    plt.show()

实用优化建议

面对3000组图的规模,可做以下调整提升效率:

  • 批量保存图片到指定文件夹,避免逐个手动关闭:
import os
os.makedirs("xy对比图", exist_ok=True)

for n in range(1001):
    x_col = f"X_{n}"
    y_col = f"Y_{n}"
    
    for row_idx in df.index:
        x_val = df.loc[row_idx, x_col]
        y_val = df.loc[row_idx, y_col]
        plt.scatter(x_val, y_val, label=f"行{row_idx}")
    
    plt.xlabel(x_col)
    plt.ylabel(y_col)
    plt.title(f"{x_col} vs {y_col}")
    plt.legend()
    plt.savefig(f"xy对比图/X{n}_vs_Y{n}.png")
    plt.close()  # 关闭画布释放内存
  • 若数据为时序类,将plt.scatter替换为plt.plot生成折线图;
  • 可使用子图网格一次性展示多行的对比结果,减少窗口切换次数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 15:03:25