如何遍历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
相关产品推荐
相关产品推荐

