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

如何用Pandas和Numpy读取CSV并提取非对角线值转为一维列?

解决方案

问题根源

  1. 读取CSV时的分隔符错误:你的CSV用|作为分隔符且带空格,但原代码未指定分隔规则,pandas默认用逗号分割,导致第一行被识别成表头,后续数据读取混乱,首行数据丢失。
  2. 未过滤对角线元素:直接ravel会保留所有元素,包括对角线的0值。

修正后的代码

import numpy as np
import pandas as pd

# 正确读取CSV:指定分隔符为带空格的|,且无表头
data = pd.read_csv(
    r"C:\Users\soso-\Desktop\SVM\DataSet\chem_Jacarrd_sim.csv",
    sep=r'\s*\|\s*',  # 匹配带任意空格的|分隔符
    header=None,      # 第一行是数据,不是表头
    engine='python'   # python引擎支持正则分隔符,避免警告
)

# 转换为numpy数组
row_vector = np.array(data)

# 生成掩码:排除对角线元素(仅保留i != j的位置)
mask = np.eye(row_vector.shape[0], dtype=bool)
filtered_data = row_vector[~mask]

# 转换为单列DataFrame并保存
df = pd.DataFrame({'chem': filtered_data})
df.to_csv("my2.csv", index=False)  # index=False避免保存额外的索引列

代码说明

  • sep=r'\s*\|\s*':用正则匹配分隔符,不管|前后有多少空格,都能正确分割数据。
  • header=None:告诉pandas第一行是数据而非表头,避免首行丢失。
  • np.eye生成和数组同大小的单位矩阵(对角线为True),取反~mask后,对角线位置会被过滤,只保留非对角线元素。
  • index=False:保存CSV时不会自动添加索引列,输出格式更符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 01:25:14