python-3.x “Series”对象没有属性“datetime”

64jmpszr  于 2023-04-08  发布在  Python
关注(0)|答案(2)|浏览(239)

我正在尝试将一列时间戳(YYYY-MM-DD HH-MM-SS)从pandas Dataframe 转换为秒。
下面是我目前的代码:

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'

有人能指出我可能遗漏了一个步骤吗?

egdjgwm8

egdjgwm81#

我使用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()
busg9geu

busg9geu2#

将日期时间转换为数字的一种方法是将其视为'int64'

df['ns_since_UNIX_epoch'] = df['recorded_time'].view('int64')

# this is equivalent to 
(df['recorded_time'] - pd.Timestamp('1970-01-01')).dt.total_seconds() * 10**9

通常,要访问datetime方法,请在pandas列上使用.dt访问器;要访问字符串方法,请使用.str访问器。
要查看pandas列或Series的所有属性的列表,请调用dir()。您可以检查以下内容:

'datetime' in dir(pd.Series)          # False
'dt' in dir(pd.Series)                # True
'total_seconds' in dir(pd.Series.dt)  # True

相关问题