"Неверное количество элементов передано 2, размещение подразумевает 1" ошибка с pandas фрейм данных при работе с двумя столбцами - PullRequest
0 голосов
/ 09 июля 2020

У меня есть фрейм данных - для примера данных каждый день имеет только 10 минут:

                Date    Close
0   2019-06-20 07:00:00 2927.25
1   2019-06-20 07:05:00 2927.00
2   2019-06-20 07:10:00 2926.75
183 2019-06-21 07:00:00 2932.25
184 2019-06-21 07:05:00 2932.25
185 2019-06-21 07:10:00 2931.00
366 2019-06-24 07:00:00 2941.75
367 2019-06-24 07:05:00 2942.25
368 2019-06-24 07:10:00 2941.50
549 2019-06-25 07:00:00 2925.50
550 2019-06-25 07:05:00 2926.50
551 2019-06-25 07:10:00 2926.50
732 2019-06-26 07:00:00 2903.25

Я хочу получить дневной диапазон цены закрытия.
Я сгруппировал данные по дням и получите min max close:

rangeofday = df.groupby(pd.Grouper(key='Date', freq='1D')).agg({'Close':[np.min, np.max]})
rangeofday = rangeofday.dropna()

            Close
            amin    amax
Date        
2019-06-20  2926.75 2927.25
2019-06-21  2931.00 2932.25
2019-06-24  2941.50 2942.25
2019-06-25  2925.50 2926.50
2019-06-26  2903.25 2904.00
... ... ...

Пока все хорошо, но происходит то, что имена столбцов странные и почему-то недоступны по имени.

    rangeofday.amin
or
    rangeofday.Closeamin

    = 'DataFrame' object has no attribute 'amin'

Так что я могу получить к ним доступ с помощью ilo c:

rangeofday.iloc[:, [1]]

            Close
            amax
Date    
2019-06-20  2927.25
2019-06-21  2932.25
2019-06-24  2942.25
2019-06-25  2926.50

Теперь я пытаюсь вычесть min из max:

rangeofday['range'] = (rangeofday.iloc[:, [0]] - rangeofday.iloc[:, [1]])/0.25

и получаю сообщение об ошибке:

Wrong number of items passed 2, placement implies 1

Что это значит и как обойти эту ошибку?

1 Ответ

1 голос
/ 09 июля 2020

Так как вы применили несколько функций agg, pandas автоматически применил MultiIndex к вашему сгруппированному фрейму. См. Более подробную информацию: https://pandas.pydata.org/pandas-docs/stable/user_guide/advanced.html

В частности, если вы хотите получить доступ к столбцам, вы можете получить доступ, передав имена столбцов как tuple:

rangeofday[('Close', 'amax')]

или

rangeofday.loc[:, ('Close', 'amin')]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...