大熊猫重采样语法示例

时间:2019-08-30 18:43:03

标签: python pandas

我有这个:

columns_dict = {'open': 'first', 'high': 'max', 'low': 'min', 'close': 'last', 'volume': 'sum'}
daily_data = hourly_data.resample('1D').agg(columns_dict)

我得到这个警告:

  

FutureWarning:不建议将dict与重命名一起使用,并且会   在将来的版本中删除。

     

对于特定于列的分组重命名,请使用命名的聚合

>>> df.groupby(...).agg(name=('column', aggfunc))

但是我不太明白语法。它期望这样吗?

daily_data = hourly_data.resample('1D').agg(name=('open', first)).agg(name=('high', max))

编辑:

在BallpointBen(位于https://pandas.pydata.org/pandas-docs/stable/user_guide/groupby.html#aggregation)所指向的文档之后,我想到了以下内容:

    daily_data = hourly_data.resample('1D').agg(
        open=pd.NamedAgg(column='open', aggfunc='first'),
        high=pd.NamedAgg(column='high', aggfunc='max'),
        low=pd.NamedAgg(column='low', aggfunc='min'),
        close=pd.NamedAgg(column='close', aggfunc='last'),
        volume=pd.NamedAgg(column='volume', aggfunc='sum'))

但是这将不起作用:

aggregate() missing 1 required positional argument: 'func'

所以,我回到文档中,寻找汇总,并发现了这一点:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.agg.html#pandas.DataFrame.agg

所以我做了以下事情:

    daily_data = hourly_data.resample('1D').agg(
        {
            'open': ['open', 'first'],
            'high': ['high', 'max'],
            'low': ['low', 'min'],
            'close': ['close', 'last'],
            'volume': ['volume', 'sum']
        }) 

但随后崩溃:

<class 'tuple'>: (<class 'KeyError'>, KeyError("Column 'open' does not exist!"), <traceback object at 0x110143820>)

所以,我不理解错误消息,因为它们看起来像是为已经非常了解熊猫的人编写的,并且我当然也不了解有关聚合的文档。第一部分是groupby文档,不确定其适用范围以及聚合是否具有相同的语法。但是groupby聚合文档显示的语法与专用于聚合的页面的语法不同...


编辑:

这也不起作用:

    daily_data = hourly_data.resample('1D').agg(
            ('open', 'first'),
            ('high', 'max'),
            ('low', 'min'),
            ('close', 'last'),
            ('volume', 'sum')
        )

也不这样做:

   daily_data = hourly_data.resample('1D').agg(
            open=('open', 'first'),
            high=('high', 'max'),
            low=('low', 'min'),
            close=('close', 'last'),
            volume=('volume', 'sum')
        )

我在网络上找到的所有示例都具有旧语法,包括SO上的所有语法。

pandas文档中有reasample示例:

以及那里的聚合样本:

并且它们都没有显示新语法的示例。

SIA建议传递名称元组,这很有意义..但是我在文档中找不到该字段名称的任何地方。 并且,在查看警告文字时:

  
    
      

df.groupby(...)。agg(name =('column',aggfunc))

    
  

整个元组都被命名了...仍然不知道这个名字应该代表什么..列名?一些操作名称?再次,没有清晰的文档。

但是然后,查看警告的测试结果

  

FutureWarning:不建议将dict与重命名一起使用,并且在以后的版本中将会删除。

     

对于特定于列的分组重命名,请使用命名的聚合

重命名在哪里起作用?我正在重采样,我不想重命名任何东西,所以我也不明白这里的消息。

试图发挥创造力,我什至为此:

    daily_data = hourly_data.resample('1D').agg(
        [
            namedtuple('open', pd.NamedAgg(column='open', aggfunc='first')),
            namedtuple('high', pd.NamedAgg(column='high', aggfunc='max')),
            namedtuple('low', pd.NamedAgg(column='low', aggfunc='min')),
            namedtuple('close', pd.NamedAgg(column='close', aggfunc='last')),
            namedtuple('volume', pd.NamedAgg(column='volume', aggfunc='sum'))
        ]) 

具有相同的结果。

0 个答案:

没有答案