Интересный вопрос, давайте создадим простой DataFrame, чтобы провести несколько экспериментов:
import pandas as pd
df = pd.DataFrame({'2008': [1, 3], 'column 2': [2, 4]},
index = ['2007', '2008'])
df
2008 column 2
2007 1 2
2008 3 4
Как вы говорите, обычный способ выбора столбца - индексировать его имя в квадратных скобках:
df['2008']
2007 1
2008 3
Name: 2008, dtype: int64
Так что это работает, даже если есть индексное значение с тем же именем. А как насчет выбора некоторых строк?
df['2008':]
2008 column 2
2008 3 4
Это также все еще работает! Можем ли мы разрезать столбцы таким же образом?
df['column 2':]
2008 column 2
Нет, pandas все еще предполагает, что мы хотим нарезать определенные строки, например, мы получаем пустой DataFrame, так как индекс 'column 2'
не делает существовать.
Вывод: Если вы укажете один индекс в квадратных скобках, pandas предполагает, что это имя столбца. Но если вы предоставляете одну операцию среза в квадратных скобках, pandas предполагает, что вы хотите нарезать индекс (то есть выбрать определенные строки). Это имеет смысл, поскольку нарезка более естественна для индекса, чем для имен столбцов.
Тем не менее, это может сбивать с толку и не очень удобочитаемо, поэтому я бы рекомендовал использовать loc
, чтобы явно дать обоим строка и столбец нарезки для таких операций:
df.loc['2008':, :]
2008 column 2
2008 3 4