2017-10-21 91 views
-5
import pandas as pd 
from pandasql import sqldfimport datetime as d 

pysqldf=lambda query:sqldf(query=query,env=globals()) 
df=pd.read_csv('https://s3.amazonaws.com/content.udacity-data.com/courses/ud359/weather_underground.csv') 
df['date']=pd.to_datetime(df['date']) 
df['day']=df['date'].dt.weekday_name 

第8行发生了什么特别的.dt? 是那个班? 有人可以提供面向对象的视角?df ['day'] = df ['date']。dt.weekday_name'.dt'面向对象方式

+0

查阅熊猫文档:https://pandas.pydata.org/pandas-docs/stable/timeseries.html和https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series。 dt.html – Craig

+1

'pysqldf = lambda查询:sqldf(query = query,env = globals())'应该做什么? – roganjosh

+0

我错过了最后一行,但在这种情况下,它什么都没做 –

回答

0

.dtSeries对象的一种灵活访问器,其类似于datetime类型的数据类型。

Series docs

.dt访问者

系列有一个访问器,以简洁地返回日期时间等的系列的值的属性,如果是像系列日期时间/周期。这将返回一个系列,与现有系列一样索引。

我用这个问题作为探索.dt代码库的一个机会,因为我总是很想知道它是如何实现它的魔法的。以下是通过Pandas源代码跟随方法调用和继承链拼凑在一起的叙述。对于任何真正的熊猫专家,请原谅任何虚假陈述 - 我会欢迎更正。

引擎盖下看,Series对象created有一些内置的访问器:dtcatstr

.dt存取是defined作为AccessorProperty对象,它调用maybe_to_datetimelike()返回一个数Properties对象中的一个(例如DatetimePropertiesTimedeltaProperties等)。基于所讨论的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被级联列表中包含您期望从获得的所有实际属性,例如yeardayis_month_startweekday_name

这个过程灌输了.dt访问其系列的适当datetime属性。