Код: Выделить всё
df = pd.DataFrame({'Name': ['Alice', 'Bob', 'Aritra'],
'Age': [25, 30, 35],
'Location': ['Seattle', 'New York', 'Kona']},
index=([10, 20, 30]))
Код: Выделить всё
# (1) str
df.iloc[0, df.columns.get_loc('Name')]
# (2) Series
df.iloc[0:1, df.columns.get_loc('Name')]
# (3) Series
df.iloc[0:2, df.columns.get_loc('Name')]
# (4) DataFrame
df.iloc[0:2, df.columns.get_loc('Name'):df.columns.get_loc('Age')]
# (5) Series
df.iloc[0, df.columns.get_loc('Name'):df.columns.get_loc('Location')]
# (6) DataFrame
df.iloc[0:1, df.columns.get_loc('Name'):df.columns.get_loc('Location')]
Почему они выводят разные типы объектов? Как я могу предсказать, какой тип объекта будет выведен?
Учитывая данные, похоже, что правило основано на том, сколько срезов (двоеточий) у вас есть в индексе. :
- 0 фрагментов (): скалярное значение
Код: Выделить всё
(1)
- 1 срез (, (3), (5)): серия
Код: Выделить всё
(2)
- 2 фрагмента (, (6)): DataFrame
Код: Выделить всё
(4)
Я потратил некоторое время на изучение документацию по индексированию, но, похоже, это поведение не описано четко. В документации для функции iloc также не описаны типы возвращаемых значений.
Меня также интересует тот же вопрос для loc вместо iloc, но, поскольку loc является инклюзивным, результаты не столь сбивают с толку. (То есть вы не можете получить пары индексов разных типов, где индексы должны извлекать одни и те же данные.)
Подробнее здесь: https://stackoverflow.com/questions/786 ... -dataframe