说我有以下DataFrame:
df = pd.DataFrame("x":[pd.Timestamp("2016-03-18")])
如何访问列x
中存储的日期时间对象的属性?也就是说,我想要例如。
df.x[0].weekofyear # returns 9
但对于整个专栏。显然,df.x.weekofyear
不起作用,因为df.x
是一个系列而不是日期时间对象,df.x.apply(pd.Timestamp.weekofyear)
也不会工作,因为weekofyear
是属性而不是函数。
我能想到的解决方案是定义一个访问属性的函数,然后将其应用于:
def get_week(x):
return x.weekofyear
df.x.apply(get_week) # returns series of weeks
这似乎有点迂回而且冗长,我的经验是每当我做这样的事情时,大熊猫已经有了一个超级高效的内置方式来做到这一点 - 这个案例有吗?
答案 0 :(得分:3)
使用vectorised .dt.weekofyear
因此df['x'].dt.weekofyear
将返回整列:
In [119]:
df = pd.DataFrame({'dates': pd.date_range(dt.datetime(2016,1,1), dt.datetime(2016,1,20))})
df
Out[119]:
dates
0 2016-01-01
1 2016-01-02
2 2016-01-03
3 2016-01-04
4 2016-01-05
5 2016-01-06
6 2016-01-07
7 2016-01-08
8 2016-01-09
9 2016-01-10
10 2016-01-11
11 2016-01-12
12 2016-01-13
13 2016-01-14
14 2016-01-15
15 2016-01-16
16 2016-01-17
17 2016-01-18
18 2016-01-19
19 2016-01-20
In [120]:
df['dates'].dt.weekofyear
Out[120]:
0 53
1 53
2 53
3 1
4 1
5 1
6 1
7 1
8 1
9 1
10 2
11 2
12 2
13 2
14 2
15 2
16 2
17 3
18 3
19 3
Name: dates, dtype: int64