1

下面是我的数据框

from pandas import Timestamp
df = pd.DataFrame({'Year': [Timestamp('2023-03-14 00:00:00'),Timestamp('2063-03-15 00:00:00'),Timestamp('2043-03-21 00:00:00'),Timestamp('2053-10-09 00:00:00')],
                    'offset' : [1, 9, 8, 1]
})

当我将“年份”列转换为 list() 时,它们被保存为时间戳

>>> df['Year'].to_list()
[Timestamp('2023-03-14 00:00:00'),
 Timestamp('2063-03-15 00:00:00'),
 Timestamp('2043-03-21 00:00:00'),
 Timestamp('2053-10-09 00:00:00')]

但是,当我转换为值时,它们会保存为 datetime64

>>> df['Year'].values
array(['2023-03-14T00:00:00.000000000', '2063-03-15T00:00:00.000000000',
       '2043-03-21T00:00:00.000000000', '2053-10-09T00:00:00.000000000'],
      dtype='datetime64[ns]')

如何获取我的数组Timestamp本身(而不是datetime64格式)?

4

1 回答 1

1

它被转换为 adatetime64因为 numpy 数组只包含某些数据类型Timestamp对象不是其中之一。这与 numpy 数组如何作为一个连续块存储在内存中并由 numpy 的 C 后端处理有关。

v1.7datetime64开始,添加了核心数据类型以支持这些功能,但它们仍将数据作为整数引用timedelta64存储在内存中

您可以使用创建一个 numpyTimestamp对象数组np.array(df.Year.to_list()),但这将导致数组具有dtype=object

array([Timestamp('2023-03-14 00:00:00'), Timestamp('2063-03-15 00:00:00'),
       Timestamp('2043-03-21 00:00:00'), Timestamp('2053-10-09 00:00:00')],
      dtype=object)

有关这意味着什么的更多信息,请参阅此答案

创建一个数组dtype=object是不同的。数组占用的内存现在充满了指向 Python 对象的指针,这些对象存储在内存中的其他位置(就像 Python 列表实际上只是指向对象的指针列表,而不是对象本身)。

于 2021-07-15T15:51:17.407 回答