有效地访问pandas列中对象的属性

时间:2016-03-18 09:54:12

标签: python pandas

说我有以下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

这似乎有点迂回而且冗长,我的经验是每当我做这样的事情时,大熊猫已经有了一个超级高效的内置方式来做到这一点 - 这个案例有吗?

1 个答案:

答案 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