如何计算CSV文件每行数据与目标向量的欧氏距离并解决运行报错
代码错误修复与实现方案
原代码错误列表
- 库名拼写错误:
import NumPy as np应改为import numpy as np,Python标准库名大小写敏感 - 变量命名非法:
Target vector包含空格,不符合Python变量命名规则 - 变量未定义:距离计算中用到的
p1无赋值,对应你的目标向量 - 缩进语法错误:多行行首多余空格,触发Python缩进报错
- 表达式断行错误:平方和计算表达式无故换行,语法解析失败
- 逻辑不符合需求:仅提取了CSV第一行数据,未实现全量行距离计算
修正后可运行代码
import os import numpy as np import pandas as pd # 读取本地CSV文件 fname = os.path.join("dataset.csv") avg_monthly_precip = pd.read_csv(fname) # 打印数据集统计信息,校验读取是否正常 print(avg_monthly_precip.describe()) # 定义目标向量,转为numpy数组方便批量计算 target_vec = np.array([70, 60, 59, 10]) # 提取所有行的前4列数据 row_data = avg_monthly_precip.iloc[:, 0:4].values # 批量计算每行与目标向量的欧氏距离,axis=1表示按行计算 euclidean_distances = np.linalg.norm(row_data - target_vec, axis=1) # 打印所有行的计算结果 for row_num, dist in enumerate(euclidean_distances, 1): print(f"第{row_num}行欧氏距离:{dist:.4f}")
补充说明
如果你的CSV前4列存在非数值类型数据,需要先做类型转换再计算,可在提取row_data前添加如下代码处理异常值:
# 将前4列强制转为数值类型,异常值转为NaN后删除对应行 avg_monthly_precip.iloc[:, 0:4] = avg_monthly_precip.iloc[:, 0:4].apply(pd.to_numeric, errors='coerce') avg_monthly_precip = avg_monthly_precip.dropna(subset=avg_monthly_precip.columns[0:4])
内容的提问来源于stack exchange,提问作者Muhammed Farhan Aslam
相关产品推荐
相关产品推荐

