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

从Universe Sandbox 2导出的CSV中提取浮点值并存入NumPy数组

解决方案

问题根源

你的CSV文件开头包含4行带双引号包裹的注释行,直接用常规方式读取会将注释内容混入数据列,导致整个列的类型为object,无法直接转换为浮点型。

步骤1:正确读取CSV文件

通过跳过注释行并处理引号格式,让Pandas正确解析数值数据:

方法一:直接跳过前4行注释

import pandas as pd
import csv

# 替换成你的CSV文件路径(Colab中可先上传文件或使用对应路径)
df = pd.read_csv(
    'your_file.csv',
    skiprows=4,  # 跳过前4行注释内容
    header=0,    # 第5行作为表头
    quotechar='"' # 处理每行的双引号包裹格式
)

方法二:动态过滤注释行(适用于注释行数不固定的情况)

如果注释行数可能变化,先读取所有行并过滤掉以"#开头的行:

with open('your_file.csv', 'r') as f:
    # 去掉每行首尾的双引号,同时过滤掉注释行
    filtered_lines = [line.strip().strip('"') for line in f if not line.strip().startswith('"#')]

# 从过滤后的行构建DataFrame
header = filtered_lines[0].split(',')
data_rows = [row.split(',') for row in filtered_lines[1:]]
df = pd.DataFrame(data_rows, columns=header)

步骤2:验证并转换数据类型

读取完成后,检查数据类型:

print(df.dtypes)

正常情况下,两列都应显示为float64。如果仍有异常,强制转换为数值型(自动忽略无法转换的无效内容):

df['TimePassed (year)'] = pd.to_numeric(df['TimePassed (year)'], errors='coerce')
df['Body.RelativeSpeed (km/s)'] = pd.to_numeric(df['Body.RelativeSpeed (km/s)'], errors='coerce')

步骤3:转换为NumPy数组

将处理好的DataFrame转换为NumPy数组,方便后续分析:

import numpy as np

# 提取单独的一维数组
time_array = df['TimePassed (year)'].to_numpy()
speed_array = df['Body.RelativeSpeed (km/s)'].to_numpy()

# 或转换为二维数组(包含两列数据)
full_data_array = df.to_numpy()

步骤4:图形分析示例

用Matplotlib绘制时间与相对速度的关系图:

import matplotlib.pyplot as plt

plt.plot(time_array, speed_array, linewidth=1.5)
plt.xlabel('Time Passed (year)')
plt.ylabel('Relative Speed (km/s)')
plt.title('Earth Relative Speed vs. Time')
plt.grid(alpha=0.3)
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 09:07:16