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

如何在Pandas DataFrame中混合一维与二维变量?

在Pandas DataFrame中存储多维数组列的正确方法

你遇到的错误是因为Pandas默认要求DataFrame的每一列都是一维数组/序列,而你的wav是二维数组(形状(3,6)),直接传入会被Pandas误解为要生成6列数据,导致维度不匹配。

以下是两种简洁的解决方法:

方法1:将二维数组转换为列表的列表

使用NumPy数组的tolist()方法,把二维数组转换成包含子列表的一维列表,每个子列表对应原数组的一行:

import pandas as pd
import numpy as np

lat = np.array([80.589, 80.592, 80.595])
lon = np.array([50.268, 50.264, 50.260])
wav = np.array([[486, 605, 666, 821, 777,  719],
                [ 65,  60,  68,  67,  72,   64],
                [866, 946, 882, 855, 999, 1195]])

df = pd.DataFrame({
    'Lon': lon,
    'Lat': lat,
    'Wav': wav.tolist()  # 转换为列表的列表
})

print(df.head(1))

运行后输出符合预期:

Lon     Lat                                          Wav
0  50.268  80.589  [486, 605, 666, 821, 777, 719]

方法2:生成一维的数组序列

通过列表推导式把二维数组的每一行提取为独立的一维数组,再传入DataFrame:

df = pd.DataFrame({
    'Lon': lon,
    'Lat': lat,
    'Wav': [row for row in wav]
})

这种方法和方法1效果一致,区别在于Wav列的元素是NumPy一维数组而非Python列表,可根据后续数据处理需求选择。

原理说明

Pandas允许列中存储可迭代对象(如列表、一维数组),只要整个列是一维结构(即每个位置对应一个元素,不管元素本身是多维的)。直接传入二维数组时,Pandas会尝试将其拆解为多个列,因此触发维度错误;转换为一维的"元素是多维对象"的结构后,就能正常识别为单列数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 22:25:09