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

如何将Excel导入的NumPy ndarray中字符串替换为NaN或插值值?

解决方案

1. 高效清洗混合类型数据(替换字符串为np.nan)

直接利用pandas的批量类型转换能力处理,无需逐个检查单元格:

import pandas as pd
import numpy as np
from scipy.interpolate import griddata

# 读取Excel表格
df = pd.read_excel("your_file.xlsx")

# 提取自变量轴:首行是x轴(从第二列开始),首列是y轴(从第二行开始)
x_axis = df.columns[1:].astype(float)
y_axis = df.iloc[1:, 0].astype(float)

# 批量转换数据区域:所有无法转为数值的内容(含任意字符串)自动转为np.nan
data_matrix = df.iloc[1:, 1:].apply(pd.to_numeric, errors="coerce").values

pd.to_numeric(errors="coerce")会批量扫描整个数据区域,自动过滤非数值内容,效率远高于逐单元格检查。


2. 二维线性插值填充np.nan

根据自变量网格的规则性,选择两种高效方案:

方案A:不规则/非等间距网格(通用场景)

用scipy.griddata实现任意分布点的线性插值:

# 生成全网格坐标矩阵
xx, yy = np.meshgrid(x_axis, y_axis)

# 提取非NaN点的坐标与对应数值
mask = ~np.isnan(data_matrix)
points = np.column_stack((xx[mask], yy[mask]))
values = data_matrix[mask]

# 执行线性插值,填充所有NaN位置
interpolated_matrix = griddata(points, values, (xx, yy), method="linear")

方案B:规则等间距网格(效率优化)

如果x、y轴是等间距规则网格,用RegularGridInterpolator速度更快:

from scipy.interpolate import RegularGridInterpolator

# 创建规则网格插值器
interp = RegularGridInterpolator(
    (y_axis, x_axis), 
    data_matrix, 
    method="linear", 
    bounds_error=False, 
    fill_value=None
)

# 生成全网格插值结果
interpolated_matrix = interp((yy, xx))

关键说明

  • 数据清洗阶段完全无需手动判断单元格类型,pd.to_numeric会自动处理所有非数值内容。
  • 插值方法可灵活调整:method="linear"对应线性插值,若需平滑效果可改用method="cubic";超出自变量范围的NaN可通过fill_value参数设置填充规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 22:10:10