【问题标题】:How to convert numpy and pandas datetime objects to numeric?如何将 numpy 和 pandas 日期时间对象转换为数字?
【发布时间】:2018-12-02 07:46:31
【问题描述】:

使用时间戳,日期时间并不总是很方便。一些程序需要简单的数字输入。当 pandas 时间戳在 pandas.Series 中收集时,很容易将它们转换为数值并返回。

import pandas as pd
from pandas import Timestamp

age = [30, 31, 31]
date = [Timestamp('2001-02-10 00:01:00'),
 Timestamp('2001-11-12 00:01:00'),
 Timestamp('2002-02-27 00:01:00')]

df = pd.DataFrame({'age': age, 'date': date})

pd.to_numeric(df.date)
0     981763260000000000
1    1005523260000000000
2    1014768060000000000

虽然将单个 pandas 或 numpy datetime 对象或 timedelta 转换为数字并不像那样工作。

pd.to_numeric(Timestamp('2001-02-10 00:01:00'))
pd.to_numeric([Timestamp('2001-02-10 00:01:00')])
pd.to_numeric([numpy.datetime64('2001-02-10T00:01:00.000000000')])
pd.to_numeric([pd.Timedelta('365 days')])
# all give:
#> TypeError: Invalid object type at position 0

将这些类型转换为数字类型的正确方法是什么?

【问题讨论】:

  • @jpp:我不希望生成 Series 或 DataFrame 只是为了将 Datetime 转换为数值。前两个问题涉及 Series 和 DataFrames。第三个问题是关于 datetime、Timestamp 和 datetime64 之间的转换。它实际上根本与数值无关。最后一个问题有点像我想要的,但也非常具体。所以,我不认为这是一个重复的问题。

标签: python pandas numpy datetime


【解决方案1】:

将 timedelta 转换为数字:

x = pd.Timedelta('365 days')
x
#Timedelta('365 days 00:00:00')

type(x)
#pandas._libs.tslibs.timedeltas.Timedelta

y = x / np.timedelta64(1, 'D')
y
#365.0

type(y)
#float

【讨论】:

    【解决方案2】:

    只需使用时间戳tsts.value属性即可:

    ts = Timestamp('2001-02-10 00:01:00')
    print(ts.value)
    #981763260000000000
    

    【讨论】:

      【解决方案3】:

      试试pandas.Timestamp类的方法:

      >>> Timestamp('2001-02-10 00:01:00').timestamp()
      981763260.0
      

      【讨论】:

      • .timestamp()的返回值与pd.to_numeric()不一致。
      猜你喜欢
      • 2021-02-26
      • 1970-01-01
      • 1970-01-01
      • 2022-08-18
      • 2018-05-20
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多