【发布时间】:2017-01-19 14:23:11
【问题描述】:
是否可以使用 df.apply 来获取属性而不是运行函数?我想从日期中检索年份以执行 groupby。例如..
import pandas as pd
import datetime
import numpy as np
df = pd.DataFrame({'date': [datetime.datetime(2010,1,1)+datetime.timedelta(days=i*15)
for i in range(0,100)]})
这行得通..
df['year'] = [d.year for d in df['date']]
这也有效..
df['year'] = df['date'].apply(lambda x: x.year)
但这不是..
df['year'] = df['date'].apply(year)
这也不是..
df['year'] = df['date'].year
最有效的方法是什么?
【问题讨论】:
-
在访问系列对象时使用
.dt访问器 -df['date'].dt.year。 -
除了上面的评论,为什么
df['year'] = df['date'].apply(year)会起作用?year需要是一个已定义的对象或方法才能应用于每一行,这不是您需要lambda的原因 -
@NickilMaveli 谢谢。这个日期时间是特定的吗?如果我想访问另一个非日期时间对象的属性,我是使用 lambda 还是有快捷方式?
-
一个非日期时间对象呢?完全是另一个对象——比如带有
.foo这样的属性。 -
是的,我的意思是是否有更通用的方式来访问不是
datetime特定的系列中对象的属性或方法。我猜是apply和lambda。
标签: python pandas python-datetime