python - Python & Numpy - 如何删除每个数字/元素的最后 2 位数字?
问题描述
我有问题:
我使用 numpy 数组,但我有点卡住了。所以我有一个这样的年月数组:
array([['202305'],
['202109'],
['202110'],
['202002'],
['202001'],
['202003']], dtype='<U6')
所以,'202305' 表示:2023 年,5 月。问题是我只需要年份,所以我想删除最后 2 位数字,以便得到这样的数组:
array([['2023'],
['2021'],
['2021'],
['2020'],
['2020'],
['2020']], dtype='<U4')
我尝试了多种类似的方法:
for jaar in hr_jaar:
jaar = int(str(jaar)[0:4])
这给出了我在大多数情况下得到的错误,但并不真正知道这意味着什么:
ValueError: invalid literal for int() with base 10: "['20"
它应该很简单,但我不知何故被卡住了:)真的很感激!
解决方案
更详细地了解迭代正在做什么:
In [118]: for jaar in hr_jaar:
...: print(jaar, str(jaar)[0:4])
...:
['202305'] ['20
['202109'] ['20
['202110'] ['20
['202002'] ['20
['202001'] ['20
['202003'] ['20
hr_jaar
是 (6,1) 数组,所以jaar
是 (1,) 数组。 str(...)
将该数组转换为字符串,包括“['”。
In [119]: for jaar in hr_jaar:
...: print(jaar[0], jaar[0][0:4])
...:
202305 2023
202109 2021
202110 2021
202002 2020
202001 2020
202003 2020
jaar[0]
将该字符串从数组中取出,然后可以对其进行切片。
但:
In [120]: for jaar in hr_jaar:
...: jaar = jaar[0][0:4]
不改变hr_jaar
。这是基本的 Python 迭代行为。
您必须在新列表中收集更改的字符串,就像使用此列表理解所做的那样:
In [122]: [jaar[0][0:4] for jaar in hr_jaar]
Out[122]: ['2023', '2021', '2021', '2020', '2020', '2020']
使用astype
更简单,但我认为您需要了解您的代码有什么问题。
推荐阅读
- excel - 根据所选值禁用或启用字段
- sas - 使用 SAS EG 获取百分比
- python - Python 3.6 没有名为 ... 在 windows Server 2008 R2 上的模块
- xamarin - Xamarin Forms 中的部分屏幕页面
- stripe-payments - 尝试获取 Stripe Token 时出错
- javascript - ajax功能完成后socket.io连接
- sql-server - SSRS 中个人姓名的单独图表
- reactjs - 在 RxJS 或 Redux Observable 中 debounceTime 也起到延迟的作用
- swift - Swift - CoreData:从连接表中检索属性
- c# - 如何在 navMesh 中获取最近的对象并使代理向它移动