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

Pandas导出实时速度数据至CSV仅存单行?求排查解决方法

问题描述

处理动态系统时,速度约束数据存储为n×4矩阵Vd = [v_min, v_max, yaw_rate_min, yaw_rate_max],打印输出示例如下:

-0.02        0.02       -1.83728716  1.83728716
 0.02        0.06       -0.36745743  3.30711689
 0.04        0.08       -1.1023723   2.57220202
 0.06        0.1        -1.46982973  2.20474459
...

希望导出其中的速度最小、最大值到CSV文件,但使用以下代码仅能得到一行数据:

Vs = [config.min_speed+config.U1, config.max_speed+config.U1,
      -config.max_yaw_rate, config.max_yaw_rate]

Vd = [x[3] - config.max_accel * config.dt,
      x[3] + config.max_accel * config.dt,
      x[4] - config.max_delta_yaw_rate * config.dt,
      x[4] + config.max_delta_yaw_rate * config.dt]

#  [v_min, v_max, yaw_rate_min, yaw_rate_max]
dw = [max(Vs[0], Vd[0]), min(Vs[1], Vd[1]),
      max(Vs[2], Vd[2]), min(Vs[3], Vd[3])]  # 期望是n x 4矩阵,但实际是单次计算的1x4列表
dw_arr = np.array(dw)
vMin = dw_arr[:,0] #Minimum velocity data column
vMax = dw_arr[:,1] #Maximum velocity data column
print(dw_arr)

df = pd.DataFrame([vMin, vMax])
df.to_csv('Velocity Data.csv')  # 仅保存一行数据
解决建议

1. 核心问题分析

  • 数据累积错误:当前代码中dw只是单次循环计算得到的1个长度为4的列表,没有实现实时数据的累积,所以dw_arr是一维数组(shape=(4,)),而非n×4的二维数组。
  • DataFrame构造错误:即使dw_arr是二维数组,用pd.DataFrame([vMin, vMax])会把vMin和vMax作为两行存入,而非两列对应n行数据。

2. 修正步骤

步骤1:初始化累积容器

在实时收集数据的循环外部,先初始化一个空列表用于存储每一次计算的dw:

import numpy as np
import pandas as pd

# 初始化累积列表
dw_list = []

步骤2:循环中累积数据

在每次计算dw后,将其添加到dw_list中:

# 假设这部分在实时收集的循环内
Vs = [config.min_speed+config.U1, config.max_speed+config.U1,
      -config.max_yaw_rate, config.max_yaw_rate]

Vd = [x[3] - config.max_accel * config.dt,
      x[3] + config.max_accel * config.dt,
      x[4] - config.max_delta_yaw_rate * config.dt,
      x[4] + config.max_delta_yaw_rate * config.dt]

dw = [max(Vs[0], Vd[0]), min(Vs[1], Vd[1]),
      max(Vs[2], Vd[2]), min(Vs[3], Vd[3])]
# 将单次结果加入累积列表
dw_list.append(dw)

步骤3:转换为二维数组并提取目标列

循环结束后,将累积列表转为二维numpy数组,再提取速度的最小、最大值列:

# 转换为n×4的二维数组
dw_arr = np.array(dw_list)
# 提取v_min和v_max列
v_min_col = dw_arr[:, 0]
v_max_col = dw_arr[:, 1]

步骤4:正确构造DataFrame并导出

用字典或者直接取数组前两列来构造DataFrame,确保每行对应一次实时数据:

# 方法1:用字典构造,指定列名
df = pd.DataFrame({
    'v_min': v_min_col,
    'v_max': v_max_col
})

# 方法2:直接从dw_arr取前两列,指定列名
df = pd.DataFrame(dw_arr[:, :2], columns=['v_min', 'v_max'])

# 导出CSV,index=False避免保存索引列
df.to_csv('Velocity Data.csv', index=False)

3. 额外提示

如果需要在实时收集过程中逐行写入CSV(避免内存占用过大),可以使用mode='a'(追加模式)在每次循环中写入单行:

# 第一次写入时添加表头
header = True
# 循环内
dw = [max(Vs[0], Vd[0]), min(Vs[1], Vd[1]),
      max(Vs[2], Vd[2]), min(Vs[3], Vd[3])]
# 只取v_min和v_max
row = [dw[0], dw[1]]
# 构造单行DataFrame写入
pd.DataFrame([row], columns=['v_min', 'v_max']).to_csv('Velocity Data.csv', mode='a', index=False, header=header)
# 后续写入不再添加表头
header = False

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 06:55:56