说我有以下DataFrame:
df = pd.DataFrame("x":[pd.Timestamp("2016-03-18")])
如何访问存储在
x
列中的datetime对象的属性?也就是说,我想要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
看来这有点round回和冗长,而我的经验是,每当我执行此类操作时,pandas已经具有一种超高效的内置方法来执行此操作-在这种情况下是否有这种方法?
最佳答案
使用向量化的.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
关于python - 有效访问 Pandas 列中对象的属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36081217/