mor*_*rty 2 python datetime pandas
我从一些随机日期创建了一个系列
import pandas as pd
from datetime import datetime
pd.Series([datetime(2012, 8, 1), datetime(2013, 4, 1), datetime(2013, 8, 1)])
Out[49]:
0 2012-08-01
1 2013-04-01
2 2013-08-01
dtype: datetime64[ns]
Run Code Online (Sandbox Code Playgroud)
但是,如果我用 a 创建一个系列datetime.max,该系列的 dtype 突然变成了一个对象
pd.Series([datetime(2012, 8, 1), datetime(2013, 4, 1), datetime.max])
Out[50]:
0 2012-08-01 00:00:00
1 2013-04-01 00:00:00
2 9999-12-31 23:59:59.999999
dtype: object
Run Code Online (Sandbox Code Playgroud)
日期的显示方式也发生了变化。我想后一点与该系列现在是一个对象的事实有关。
datetime.max 与其他日期的类型相同
type(datetime.max)
Out[53]: datetime.datetime
type(datetime(2014, 1,1))
Out[54]: datetime.datetime
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?如何创建包含 'max'-datetime 值的系列?像这样
0 2012-08-01
1 2013-04-01
2 9999-12-31
dtype: datetime64[ns]
Run Code Online (Sandbox Code Playgroud)
的datetime64[ns]D型细胞可代表之间的日期AD 1678和AD 2262。由于datetime.max位于此范围之外,因此系列的 dtype 已更改为object并将所有值转换为datetime.datetimes,以便系列可以保存所需的日期时间范围。
目前,纳秒频率datetime64[ns]dtype(而不是说datetime64[s],,或datetime64[Y])是Pandas 支持的唯一 NumPy 日期时间 dtype。该建议的解决方法是使用pd.Period或pd.PeriodIndex对象来表示的范围表示的由外日期datetime64[ns]:
import datetime as DT
import pandas as pd
s = pd.Series([DT.datetime(2012, 8, 1), DT.datetime(2013, 4, 1), DT.datetime.max])
p = s.apply(lambda x: pd.Period(x, freq='D'))
print(p)
Run Code Online (Sandbox Code Playgroud)
产量
0 2012-08-01
1 2013-04-01
2 9999-12-31
dtype: object
Run Code Online (Sandbox Code Playgroud)
请注意,该freq参数必须设置为大于ns
扩展允许的日期范围(以较小的粒度为代价)。以下是可用于参数的常用别名表freq。
| 归档时间: |
|
| 查看次数: |
547 次 |
| 最近记录: |