【问题标题】:Why does my date column change when I convert to an ndarray为什么当我转换为 ndarray 时我的日期列会发生变化
【发布时间】:2021-09-24 11:57:05
【问题描述】:

下面是我的数据框

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 格式)获取我的数组?

【问题讨论】:

    标签: python timestamp datetime64


    【解决方案1】:

    它被转换为datetime64,因为 numpy 数组只保存certain datatypesTimestamp 对象不是其中之一。这与 numpy 数组如何作为一个连续块存储在内存中并由 numpy 的 C 后端处理有关。

    v1.7 开始,添加了核心数据类型datetime64timedelta64 以支持这些功能,但它们仍将数据以整数形式存储在内存中需要引用

    您可以使用np.array(df.Year.to_list()) 创建一个由Timestamp 对象组成的numpy 数组,但这将导致一个数组具有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)
    

    有关这意味着什么的更多信息,请参阅this answer

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

    【讨论】:

    • 完美!感谢您的解释@Pranav,这是最有帮助的
    猜你喜欢
    • 2019-07-17
    • 1970-01-01
    • 2012-06-13
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-30
    相关资源
    最近更新 更多