【问题标题】:'Series' object has no attribute 'datetime'“系列”对象没有属性“日期时间”
【发布时间】:2019-11-27 03:48:13
【问题描述】:

我正在尝试将一列时间戳 (YYYY-MM-DD HH-MM-SS) 从 pandas df 转换为秒。

这是我当前的代码:

df['recorded_time'] = pd.to_datetime(df['recorded_time'])
df['timestamp'] = df['recorded_time'].datetime.total_seconds() #creating a new column

我不断收到的错误是:

AttributeError: 'Series' object has no attribute 'datetime'.

谁能指出我可能遗漏了一个步骤?

【问题讨论】:

  • 因为它没有。 to_datetime 将返回一个 datetime64 值,该值不具有与常规 python 日期时间相同的方法/属性。你需要使用.dt 访问器,所以像df['timestamp'] = df['recorded_time'].dt. 这样total_seconds() 是python 中的datetime.timedelta 方法,所以我并没有真正按照你的期望去做,即使我们把它翻译成熊猫。 何时的秒数
  • @roganjosh 2019/01/01 00:00:00 会起作用...我试图遵循这个:stackoverflow.com/questions/56430069/… 但是,我仍然遇到相同的属性错误。
  • roganjosh 想说的是总秒数是一个时间增量,这意味着它需要两个时间点之间的总秒数。在这种情况下,您只有一个时间戳(一个时间点)。所以取“总秒数”是没有意义的。从什么时候开始的总秒数?

标签: python pandas datetime


【解决方案1】:

我将example you gave in a comment 用于df。如果不使用 .dt 访问器,则不能对 pandas datetime64 值使用常规的 datetime.datetime 方法。除了您链接到的示例之外,您还说您希望total_seconds 引用2019/01/01 00:00:00 的基本日期时间。 timedelta 必须始终有某种参考点,否则它可以是任意值。

import pandas as pd

df1 = pd.DataFrame({'lat':[15.13,12.14,13.215,11.1214,12.14], 
              'lon': [38.52, 37.536,39.86,38.536,37.536],
              'Datetime': pd.to_datetime(['2019-03-09 16:05:07',
                                          '2019-03-15 09:50:07',
                                          '2019-03-09 11:03:47',
                                          '2019-03-10 16:41:18',
                                          '2019-03-09 06:15:27']),
              'temp':[23,22,21,22,19]})

# We can just call it once to get a reference to your datum point
base_dt = pd.to_datetime('2019/01/01 00:00:00')

df1['seconds'] = (df1['Datetime'] - base_dt).dt.total_seconds()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-30
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    • 2020-11-11
    • 2019-04-22
    相关资源
    最近更新 更多