如何将CSV文件读取为第0索引存列名的numpy数组并设置表头Unicode长度为<U30
解决方法
你遇到的<U32不符合要求的问题是numpy自动推断字符串类型长度导致的,直接手动指定表头的Unicode长度为<U30即可,以下是两种可行方案:
方案1:基于pandas实现(改动最小,适配你现有逻辑)
import pandas as pd import numpy as np # 读取CSV文件 df = pd.read_csv("你的文件路径.csv") # 强制将列名转为<U30类型,避免自动推断为<U32 headers = df.columns.values.astype("<U30") # 提取数据部分 data = df.to_numpy() # 拼接表头和数据,第0行即为列名 result_arr = np.vstack([headers.reshape(1, -1), data])
验证方式:执行print(result_arr.dtype)即可看到字符串部分类型为<U30,符合要求。
方案2:numpy原生读取(无需依赖pandas)
import numpy as np # 先单独读取表头,指定dtype为<U30 with open("你的文件路径.csv", "r", encoding="utf-8") as f: headers = np.array(f.readline().strip().split(","), dtype="<U30") # 读取后续数据,自动适配数值类型 data = np.genfromtxt("你的文件路径.csv", delimiter=",", skip_header=1, dtype=None, encoding="utf-8") # 拼接得到最终数组 result_arr = np.vstack([headers.reshape(1, -1), data])
注意事项
- 你提供的样格列名最长仅13个字符,远小于30,手动指定为<U30不会出现截断问题
- 若后续修改列名,需确保单条列名长度不超过30,否则会被自动截断
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

