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

如何使用Pandas read_csv将CSV最后3列读取为数组字段?

用Pandas实现将CSV最后三列合并为数组列的方案

当然可以用Pandas搞定这个需求!你之前用NumPy的结构化数组实现了把最后三列打包成数组的效果,Pandas虽然不能直接通过dtype参数一步到位,但通过简单的后处理就能达成同样的目标,甚至更灵活。

问题原因

首先得说明:Pandas的dtype参数是用来指定单个列的数据类型的,不支持像NumPy那样把多列映射成一个数组类型的字段,所以你之前的写法会把ValArray当成一个单独的列名去匹配,自然达不到合并的效果。

完整解决方案

咱们分几步来实现:

  1. 读取原始数据并指定列名
    先把所有列读进来,同时给每一列命名(包括最后三列的临时名称),并指定前几列的正确数据类型:

    import pandas as pd
    import numpy as np
    
    # 定义所有列的名称(前三个是你要的标签,最后三个临时命名)
    column_names = ['Date', 'Val', 'Fruit', 'temp_col1', 'temp_col2', 'temp_col3']
    
    # 读取CSV,指定列名和单列数据类型
    df = pd.read_csv(
        'My input file',
        sep=',',
        header=None,
        names=column_names,
        dtype={
            'Date': str,  # 如果你需要和NumPy的'a10'一致,也可以用'S10'(字节字符串)
            'Val': float,
            'Fruit': str
        },
        skipinitialspace=True  # 对应你之前的autostrip=True,去掉逗号后的空格
    )
    
  2. 将最后三列合并为数组列
    选择临时命名的三列,把它们转换成numpy数组(或列表)并添加为新的ValArray列:

    # 方式1:用apply生成numpy数组(和你NumPy的效果一致)
    df['ValArray'] = df[['temp_col1', 'temp_col2', 'temp_col3']].apply(np.array, axis=1)
    
    # 方式2:更高效的to_numpy方法(推荐处理大数据集)
    df['ValArray'] = list(df[['temp_col1', 'temp_col2', 'temp_col3']].to_numpy())
    
  3. 清理临时列
    最后把不需要的临时三列删掉,得到你想要的结构:

    df = df.drop(['temp_col1', 'temp_col2', 'temp_col3'], axis=1)
    

最终效果

处理后的DataFrame会包含Date、Val、Fruit和ValArray四个列,其中ValArray的每个元素都是包含三个浮点数的numpy数组,和你用NumPy生成的结构化数组效果一致。

额外提示

  • 如果你需要保留字节字符串类型(对应NumPy的a10),可以把str改成'S10',比如'Date': 'S10'。
  • 如果你更倾向于用列表而不是numpy数组,把np.array换成list即可,比如apply(list, axis=1)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:28:26