未找到Pandas Series.dt.total_seconds()

Roc*_*e28 11 python pandas

我需要一个几秒钟的日期时间列,到处(包括文档)说我应该使用Series.dt.total_seconds()但它找不到该功能.我假设我有错误的版本,但我不...

pip freeze | grep pandas
pandas==0.20.3

python --version
Python 3.5.3
Run Code Online (Sandbox Code Playgroud)

这一切都在一个长期无故障运行的虚拟环境中,其他Series.dt功能都有效.这是代码:

from pandas import Series
from datetime import datetime

s = Series([datetime.now() for _ in range(10)])

0   2017-08-25 15:55:25.079495
1   2017-08-25 15:55:25.079504
2   2017-08-25 15:55:25.079506
3   2017-08-25 15:55:25.079508
4   2017-08-25 15:55:25.079509
5   2017-08-25 15:55:25.079510
6   2017-08-25 15:55:25.079512
7   2017-08-25 15:55:25.079513
8   2017-08-25 15:55:25.079514
9   2017-08-25 15:55:25.079516
dtype: datetime64[ns]

s.dt
<pandas.core.indexes.accessors.DatetimeProperties object at 0x7f5a686507b8>

s.dt.minute
0    55
1    55
2    55
3    55
4    55
5    55
6    55
7    55
8    55
9    55
dtype: int64

s.dt.total_seconds()
AttributeError: 'DatetimeProperties' object has no attribute 'total_seconds'
Run Code Online (Sandbox Code Playgroud)

我也在第二台机器上进行了测试,得到了相同的结果.我缺少什么想法?

EdC*_*ica 19

total_secondstimedelta不是的成员datetime

因此错误

你可能想要 dt.second

这将返回与之不同的第二个组件 total_seconds

所以你需要执行某种算术运算,比如为了生成一系列timedeltas而删除一些东西,然后就可以了 dt.total_seconds

例:

In[278]:
s = s - pd.datetime.now()
s

Out[278]: 
0   -1 days +23:59:46.389639
1   -1 days +23:59:46.389639
2   -1 days +23:59:46.389639
3   -1 days +23:59:46.389639
4   -1 days +23:59:46.389639
5   -1 days +23:59:46.389639
6   -1 days +23:59:46.389639
7   -1 days +23:59:46.389639
8   -1 days +23:59:46.389639
9   -1 days +23:59:46.389639
dtype: timedelta64[ns]

In[279]:
s.dt.total_seconds()

Out[279]: 
0   -13.610361
1   -13.610361
2   -13.610361
3   -13.610361
4   -13.610361
5   -13.610361
6   -13.610361
7   -13.610361
8   -13.610361
9   -13.610361
dtype: float64
Run Code Online (Sandbox Code Playgroud)


Pas*_*ten 7

实际上我刚刚意识到你可以转换为整数(如果你想要总秒数)!

>>> df.time_column.astype(int)
0     1592294727721713000
1     1592294727650772000
2     1592294727682569000
3     1592294727712650000
Run Code Online (Sandbox Code Playgroud)

  • 我收到此错误:`TypeError:无法输入从 [datetime64[ns]] 到 [int32] 的日期时间` (3认同)

mor*_*rty 5

另外,如果您真的想有几秒钟(自1970年以来),可以尝试一下

import pandas as pd
from datetime import datetime
import time

df = pd.DataFrame({'datetime' : [datetime(2012, 11, 19, 12, 40, 10), 
                                datetime(2012, 11, 19, 12, 35, 10),
                                datetime(2012, 11, 19, 12, 30, 10),
                                datetime(2012, 11, 19, 12, 25, 10)
                                ]})
df['seconds'] = [time.mktime(t.timetuple()) for t in df.datetime]
df['back_to_date_time'] = [datetime.utcfromtimestamp(t) for t in df.seconds]

>>>>df
Out[2]: 
             datetime       seconds   back_to_date_time
0 2012-11-19 12:40:10  1.353325e+09 2012-11-19 11:40:10
1 2012-11-19 12:35:10  1.353325e+09 2012-11-19 11:35:10
2 2012-11-19 12:30:10  1.353325e+09 2012-11-19 11:30:10
3 2012-11-19 12:25:10  1.353324e+09 2012-11-19 11:25:10
Run Code Online (Sandbox Code Playgroud)

或者您可以在这里查看 如何将日期时间对象转换为Python中的纪元(unix时间)以来的毫秒数?

  • 这就是我想要的。我最终进行了快速修复,只需减去 1970 年 1 月 1 日,然后在生成的“timedelta”上使用“total_seconds()”。(我真的不喜欢 datetime64 格式)。不过还是谢谢! (2认同)