.dt
是Series
对象的一种灵活访问器,其类似于datetime
类型的数据类型。
从Series
docs:
.dt
访问者
系列有一个访问器,以简洁地返回日期时间等的系列的值的属性,如果是像系列日期时间/周期。这将返回一个系列,与现有系列一样索引。
我用这个问题作为探索.dt
代码库的一个机会,因为我总是很想知道它是如何实现它的魔法的。以下是通过Pandas源代码跟随方法调用和继承链拼凑在一起的叙述。对于任何真正的熊猫专家,请原谅任何虚假陈述 - 我会欢迎更正。
引擎盖下看,Series
对象created有一些内置的访问器:dt
,cat
和str
。
的.dt
存取是defined作为AccessorProperty
对象,它调用maybe_to_datetimelike()
返回一个数Properties
对象中的一个(例如DatetimeProperties
,TimedeltaProperties
等)。基于所讨论的Series
的日期时间数据类型的风格,动态确定具体种类的Properties
对象。
Properties
对象继承了PandasDelegate
抽象类。我不完全理解代表班级在熊猫中扮演的角色。但是我们的目的的关键类方法似乎是_add_delegate_accessors()
,它允许Properties
类变体将正确的属性附加到.dt
访问器。
例如,DatetimeProperties
使用此方法来attachDatetimeIndex
属性.dt
:
DatetimeProperties._add_delegate_accessors(
delegate=DatetimeIndex,
accessors=DatetimeIndex._datetimelike_ops,
typ='property')
而TimedeltaProperties
变体attachesTimedeltaIndex
性质.dt
代替:
TimedeltaProperties._add_delegate_accessors(
delegate=TimedeltaIndex,
accessors=TimedeltaIndex._datetimelike_ops,
typ='property')
*注:_ops
properties被级联列表中包含您期望从获得的所有实际属性,例如year
,day
,is_month_start
,weekday_name
等
这个过程灌输了.dt
访问其系列的适当datetime
属性。
查阅熊猫文档:https://pandas.pydata.org/pandas-docs/stable/timeseries.html和https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series。 dt.html – Craig
'pysqldf = lambda查询:sqldf(query = query,env = globals())'应该做什么? – roganjosh
我错过了最后一行,但在这种情况下,它什么都没做 –