在Python中,有没有一种优雅的方法可以调用同一对象上的方法列表?

在Python中,有没有一种优雅的方法可以调用同一对象上的方法列表?,python,python-3.x,pandas,Python,Python 3.x,Pandas,我想知道在python中是否有一种优雅或者更简单的方法来调用同一对象上的方法列表,而不是每次重复编写。例如: df['date_col'] = pd.to_datetime(df['date_col']) df['date_col_day'] = df['date_col'].dt.day df['date_col_month'] = df['date_col'].dt.month df['date_col_year'] = df['date_col'].dt.year 可以用更优雅的 for

我想知道在python中是否有一种优雅或者更简单的方法来调用同一对象上的方法列表,而不是每次重复编写。例如:

df['date_col'] = pd.to_datetime(df['date_col'])
df['date_col_day'] = df['date_col'].dt.day
df['date_col_month'] = df['date_col'].dt.month
df['date_col_year'] = df['date_col'].dt.year
可以用更优雅的

for method in [day, month, year]:
    df[method.name] = df['date_col'].dt.method
我知道上面的例子在语法上是不正确的,它只是我想要它如何的一个演示


有可能吗?

如果您有许多函数被称为“级联”,即:

  • y1=fun1(df.x)
  • y2=fun1(y1)
  • y3=fun1(y2)
可以使用y3=df.pipe(fun1.pipe(fun2.pipe)(fun3)

然而,在您的情况下,情况有所不同,因为您想要保存 每个部分的结果都在相关列中

因此,您应该应用一个函数来生成一个序列 相关索引下的每个部分结果

示例:源数据帧是:

     date_col  Xxx     Yyy
0  2019-01-12  100   97.37
1  2019-01-16  100   86.15
2  2019-01-20   80   80.00
3  2019-01-23  100  100.00
(日期列为字符串类型)

定义以下转换函数:

def conv(str):
    datTim = pd.to_datetime(str)
    return pd.Series([datTim, datTim.day, datTim.month, datTim.year],
        index=['date_col', 'date_col_day', 'date_col_month', 'date_col_year'])
并按以下方式应用:

dtc = df.pop('date_col')
df = dtc.apply(conv).join(df)
请注意,pop检索给定的列,并将其从df中删除。 然后将conv应用于该列,生成一个数据帧,并使用 4列(日期及其“部分”)。最后一步是加入它 源数据帧的“剩余部分”(dat_col之后的列) 已删除)

现在,date_col为datetime64类型,其内容为:

    date_col  date_col_day  date_col_month  date_col_year  Xxx     Yyy
0 2019-01-12            12               1           2019  100   97.37
1 2019-01-16            16               1           2019  100   86.15
2 2019-01-20            20               1           2019   80   80.00
3 2019-01-23            23               1           2019  100  100.00