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

Python & Numpy:如何移除数组元素最后两位以提取年份?

解决Numpy二维字符串数组提取年份的问题

我来帮你搞定这个问题!先拆解下你出错的原因:你的数组是二维字符串数组(每个元素都是一个单元素子数组,比如['202305']),当你执行str(jaar)时,其实是把整个子数组转成了字符串——比如str(['202305'])会得到"['202305']",取前四位就变成了"['20",这显然不是合法的整数格式,所以触发了ValueError。

下面给你几种高效的解决方案,从numpy原生的向量化操作到修正后的循环方法都有:

方法1:用Numpy字符串工具(推荐,高效简洁)

numpy提供了专门处理字符串数组的向量化函数,直接对每个元素做切片,完全不需要循环:

import numpy as np

# 你的原始数组
hr_jaar = np.array([['202305'], ['202109'], ['202110'], ['202002'], ['202001'], ['202003']], dtype='<U6')

# 提取每个字符串的前4位(年份)
year_array = np.char.slice(hr_jaar, start=0, stop=4)

# 输出结果:array([['2023'], ['2021'], ['2021'], ['2020'], ['2020'], ['2020']], dtype='<U4')
print(year_array)

# 如果需要转成整数类型的数组,直接用astype
year_array_int = year_array.astype(int)

这个方法利用numpy的向量化特性,比手动循环快得多,尤其适合处理大规模数组。

方法2:修正你的循环逻辑

如果你坚持要用循环,需要正确访问子数组里的字符串元素,而不是直接把子数组转成字符串:

import numpy as np

hr_jaar = np.array([['202305'], ['202109'], ['202110'], ['202002'], ['202001'], ['202003']], dtype='<U6')

year_list = []
for jaar in hr_jaar:
    # 先取出子数组里的字符串元素(jaar是单元素数组,jaar[0]拿到'202305')
    year_str = jaar[0][:4]
    year_list.append([year_str])

# 转成目标numpy数组
year_array = np.array(year_list, dtype='<U4')

方法3:数学运算提取年份(适合数值化处理)

如果你的年月字符串可以安全转成整数,还可以用除法取整的方式提取年份:

import numpy as np

hr_jaar = np.array([['202305'], ['202109'], ['202110'], ['202002'], ['202001'], ['202003']], dtype='<U6')

# 先转成整数数组
int_array = hr_jaar.astype(int)
# 除以100取整得到年份
year_array_int = int_array // 100
# 若需要转回字符串格式
year_array_str = year_array_int.astype('<U4')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 17:27:39