我需要一个几秒钟的日期时间列,到处(包括文档)说我应该使用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_seconds是timedelta不是的成员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)
实际上我刚刚意识到你可以转换为整数(如果你想要总秒数)!
>>> df.time_column.astype(int)
0 1592294727721713000
1 1592294727650772000
2 1592294727682569000
3 1592294727712650000
Run Code Online (Sandbox Code Playgroud)
另外,如果您真的想有几秒钟(自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时间)以来的毫秒数?
| 归档时间: |
|
| 查看次数: |
10630 次 |
| 最近记录: |