ndarray中元素赋值字符串以后,输出的结果为什么不是字符串了?

下面这段代码在jupyter notebook中运行的结果是:
array([2, 2, 2, 2, 2, 2, 2, 2, 2, 2], dtype='<U1')
为什么不是我期待的一串日期字符组成的array?

import numpy as np

# 创建一个空的ndarray,指定dtype为字符串
arr = np.empty(shape=(10,), dtype=str)

# 日期字符串列表
date_list = ['2026-01-01', '2022-01-02', '2022-01-03', '2022-01-04', '2022-01-05', '2022-01-06', '2022-01-07', '2022-01-08', '2022-01-09', '2022-01-10']

# 逐个将日期字符串添加到ndarray中
for i, date in enumerate(date_list):
    arr[i] = date

# 打印ndarray
arr

【以下回答由 GPT 生成】

问题分析: 在给定的代码中,尝试使用NumPy创建一个ndarray,该数组的元素是日期字符串。然而,输出的结果并不是字符串数组,而是一个包含日期字符串的ndarray对象。原因是在创建ndarray时,使用了dtype=str的参数,这导致NumPy将日期字符串按照字符串类型处理,而不是按照字符串数组处理。

解决方案: 要解决这个问题,需要调整代码,使用dtype=object参数来创建一个通用的ndarray,以接受任何类型的数据。

修改后的代码如下所示:

import numpy as np

# 创建一个空的ndarray,指定dtype为object
arr = np.empty(shape=(10,), dtype=object)

# 日期字符串列表
date_list = ['2026-01-01', '2022-01-02', '2022-01-03', '2022-01-04', '2022-01-05', '2022-01-06', '2022-01-07', '2022-01-08', '2022-01-09', '2022-01-10']

# 逐个将日期字符串添加到ndarray中
for i, date in enumerate(date_list):
    arr[i] = date

# 打印ndarray
arr

修改后的代码中,使用dtype=object来创建ndarray,这样可以保证元素可以是任何类型,包括字符串。再次执行代码,将得到期望的字符串数组输出。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

引用 皆我百晓生 小程序回复内容作答:

运行这段代码的结果是array(['', '', '', '', '', '', '', '', '', ''], dtype='<U1')。

这是因为在创建空的ndarray时,指定了dtype为字符串,但是没有填充任何数据。由于ndarray的dtype是字符串,而字符串默认初始化时为空字符串'',因此打印出来的结果是一串空字符串组成的array。

正确的做法应该是使用numpy的array()函数来直接将日期列表转换为ndarray,而不是先创建一个空的ndarray再逐个将日期字符串添加进去。修改后的代码如下:

import numpy as np

日期字符串列表

date_list = ['2026-01-01', '2022-01-02', '2022-01-03', '2022-01-04', '2022-01-05', '2022-01-06', '2022-01-07', '2022-01-08', '2022-01-09', '2022-01-10']

将日期列表转换为ndarray

arr = np.array(date_list)

打印ndarray

arr