微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 为大熊猫系列timedeltas访问`.days`

Pandas timedeltaIndex有一个属性天数,可以用于其他正常dtypes(float64等)的操作:

import pandas as pd
from pandas.tseries import offsets
idx1 = pd.date_range('2017-01', periods=10)
idx2 = idx1 + offsets.MonthEnd(1)
tds = idx2 - idx1

print(tds.days - 2)
Int64Index([28, 27, 26, 25, 24, 23, 22, 21, 20, 19], dtype='int64')

但是当tds转换为Series(显式或作为DataFrame列)时,它会丢失此属性.

print(pd.Series(tds).days)
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-115-cb20b4d368f4> in <module>()
----> 1 print(pd.Series(tds).days)

C:\Users\bsolomon\Anaconda3\lib\site-packages\pandas\core\generic.py in __getattr__(self, name)
   3079             if name in self._info_axis:
   3080                 return self[name]
-> 3081             return object.__getattribute__(self, name)
   3082 
   3083     def __setattr__(self, name, value):

AttributeError: 'Series' object has no attribute 'days'

访问.days需要转换回索引:

print(pd.Index(pd.Series(tds)).days)
Int64Index([30, 29, 28, 27, 26, 25, 24, 23, 22, 21], dtype='int64')

是否有比上述转换更直接的方式来访问此属性

解决方法:

使用.dt访问器:

print(pd.Series(tds).dt.days)

输出

0    30
1    29
2    28
3    27
4    26
5    25
6    24
7    23
8    22
9    21
dtype: int64

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐