Python提取XYZ数据存CSV/Excel遇异常,求解决方案
解决3D绘图数据提取与Excel保存问题
问题分析
- CSV文件无报错但找不到:你使用的是相对路径,文件默认生成在Python脚本的当前工作目录中,大概率是你没找对位置。
- to_excel报错:pandas保存Excel需要依赖第三方库(如openpyxl),默认环境未安装该库,直接调用会触发报错。
解决方案
1. 确认CSV文件位置
在代码中添加打印当前工作目录的代码,即可明确文件生成路径:
import os print("当前工作目录:", os.getcwd())
2. 安装Excel依赖库
运行以下命令安装openpyxl(支持.xlsx格式文件读写):
pip install openpyxl
3. 修改后的完整代码
下面的代码会同时生成CSV和Excel文件,且为数据添加列名,方便后续Excel分析:
import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from matplotlib import cm from matplotlib.ticker import LinearLocator, FormatStrFormatter import pandas as pd import numpy as np import os # 用于获取当前目录及文件绝对路径 # 打印当前工作目录,便于查找生成的文件 print("当前工作目录:", os.getcwd()) fig = plt.figure() ax = fig.add_subplot(projection='3d') N = np.arange(0, 10, 1) M = np.arange(0, 15, 1) N, M = np.meshgrid(N, M) DNM = 3992.88*N - 2585.96*M # 展平数据并筛选指定范围的Z值 x, y, z = N.ravel(), M.ravel(), DNM.ravel() limits = np.logical_and(z >= -25000, z <= 20000) x, y, z = x[limits], y[limits], z[limits] # 将数据转为DataFrame并添加列名,提升可读性 xyz = np.column_stack((x, y, z)) df = pd.DataFrame(xyz, columns=['N', 'M', 'DNM']) # 保存CSV文件 csv_path = "xyz_data.csv" df.to_csv(csv_path, index=False) print(f"CSV文件已保存至:{os.path.abspath(csv_path)}") # 保存Excel文件(需提前安装openpyxl) excel_path = "xyz_data.xlsx" df.to_excel(excel_path, index=False, engine='openpyxl') print(f"Excel文件已保存至:{os.path.abspath(excel_path)}") # 若需要显示3D绘图,取消以下注释 # surf = ax.plot_surface(N, M, DNM, rstride=1, cstride=1, cmap=cm.jet, # linewidth=0, antialiased=False) # ax.set_zlim(-25000, 20000) # ax.zaxis.set_major_locator(LinearLocator(10)) # ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f')) # fig.colorbar(surf, shrink=0.5, aspect=10) # plt.show()
关键修改说明
- 新增
os模块,通过打印当前目录和文件绝对路径,彻底解决找不到生成文件的问题 - 为DataFrame添加列名,让Excel中的数据更易理解
- 保存Excel时指定
engine='openpyxl',解决依赖库缺失导致的报错
内容的提问来源于stack exchange,提问作者Mohamed Osman
相关产品推荐
相关产品推荐

