У наступних ситуаціях вони поводяться однаково:
- Вибір одного стовпця (
df['A']те саме, що df.loc[:, 'A']-> вибирає стовпець A)
- Вибір списку стовпців (
df[['A', 'B', 'C']]те саме, що df.loc[:, ['A', 'B', 'C']]-> вибирає стовпці A, B і C)
- Нарізання за рядками (
df[1:3]те саме, що df.iloc[1:3]-> вибирає рядки 1 і 2. Зверніть увагу, однак, якщо нарізати рядки з loc, замість iloc, ви отримаєте рядки 1, 2 і 3, припускаючи, що у вас є RangeIndex . Детальніше див . Тут .)
Однак []не працює в таких ситуаціях:
- Ви можете вибрати один рядок за допомогою
df.loc[row_label]
- Ви можете вибрати список рядків за допомогою
df.loc[[row_label1, row_label2]]
- Ви можете нарізати стовпці за допомогою
df.loc[:, 'A':'C']
З цими трьома не можна покінчити []. Що ще важливіше, якщо ваш вибір включає як рядки, так і стовпці, тоді призначення стає проблематичним.
df[1:3]['A'] = 5
Це вибирає рядки 1 і 2, а потім вибирає стовпець 'A' повертаючого об'єкта і присвоює йому значення 5. Проблема в тому, що об’єкт, що повертається, може бути копією, тому це не може змінити фактичний DataFrame. Це піднімає SettingWithCopyWarning . Правильним способом цього призначення є
df.loc[1:3, 'A'] = 5
Завдяки цьому .locви гарантовано зміните оригінальний DataFrame. Це також дозволяє нарізати стовпці ( df.loc[:, 'C':'F']), вибрати один рядок ( df.loc[5]) і вибрати список рядків ( df.loc[[1, 2, 5]]).
Також зауважте, що ці два не були включені в API одночасно. .locбуло додано набагато пізніше як більш потужний та явний індексатор. Дивіться відповідь Unutbu для більш детальної інформації.
Примітка: Отримання стовпців із []vs .- це зовсім інша тема. .є лише для конвенції. Це дозволяє отримати доступ лише до стовпців, чиє ім'я є дійсним ідентифікатором Python (тобто вони не можуть містити пробіли, вони не можуть складатися з чисел ...). Його не можна використовувати, коли імена суперечать методам Series / DataFrame. Його також не можна використовувати для неіснуючих стовпців (тобто призначення df.a = 1не працюватиме, якщо стовпця немає a). Крім цього, .і []ті самі.
df.col1? Всі три з них по суті еквівалентні для дуже простого випадку вибору стовпця..locдозволить вам зробити набагато більше, ніж вибрати стовпець. Можливий дублікат stackoverflow.com/questions/31593201 / ...