У наступних ситуаціях вони поводяться однаково:
- Вибір одного стовпця (
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 / ...