使用Pandas和Seaborn绘制Excel数据时遇'ufunc isfinite'错误求助
问题排查与解决方案
可能的问题点
- 数据中存在非数值型的空值变体:虽然 dtype 显示为 float64,但可能包含 Pandas 无法正常识别的异常值(比如 Excel 中的
#VALUE!、#N/A等,被强制转换为 float64 后引发计算异常)。 - Seaborn 调用参数不规范:未明确指定
x、y列,或传入了不符合折线图要求的参数格式。
分步解决
彻底校验数据有效性
运行以下代码排查数据中的异常:import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt # 读取Excel文件 df = pd.read_excel("你的文件路径.xlsx") # 查看数据类型与基本信息 print(df.info()) # 检查两列是否存在非数值元素 print("eps列非数值元素数:", df['eps'].apply(lambda x: not np.isreal(x)).sum()) print("sigma列非数值元素数:", df['sigma'].apply(lambda x: not np.isreal(x)).sum()) # 统计空值数量 print(df[['eps', 'sigma']].isna().sum())若发现非数值元素,强制转换并清理异常值:
# 强制转换为数值型,无法转换的设为NaN df['eps'] = pd.to_numeric(df['eps'], errors='coerce') df['sigma'] = pd.to_numeric(df['sigma'], errors='coerce') # 清理含空值的行(或根据需求用均值/中位数填充) df = df.dropna(subset=['eps', 'sigma'])规范绘制折线图并保存
明确指定绘图参数,完成绘图与保存:# 设置绘图风格 sns.set_style("whitegrid") # 创建画布并绘制折线图 plt.figure(figsize=(10, 6)) sns.lineplot(data=df, x='eps', y='sigma', marker='o', color='#1f77b4') # 添加图表标注 plt.title("eps 与 sigma 关系折线图", fontsize=14) plt.xlabel("eps", fontsize=12) plt.ylabel("sigma", fontsize=12) # 保存图像(支持png、jpg、svg等格式) plt.savefig("eps_sigma_trend.png", dpi=300, bbox_inches='tight') plt.show()额外排查项
若仍报错,检查索引是否存在异常:# 重置索引,排除非数值索引干扰 df = df.reset_index(drop=True)
内容的提问来源于stack exchange,提问作者Gash Guri
相关产品推荐
相关产品推荐

