2015-07-22 37 views
15

Czy ktoś może wyjaśnić, dlaczego loc używane w Pythonie Pandy z przykładami pokazanymi poniżej?funkcja loc w pandach

for i in range(0, 2): 
    for j in range(0, 3): 
    df.loc[(df.Age.isnull()) & (df.Gender == i) & (df.Pclass == j+1), 
      'AgeFill'] = median_ages[i,j] 
+1

W twoim przykładzie '.loc' jest używany głównie dlatego, że próbujesz uzyskać dostęp do komórki przez indeks kolumny" AgeFill ". –

Odpowiedz

19

Zastosowanie .loc tutaj zalecane, ponieważ metody df.Age.isnull(), df.Gender == i i df.Pclass == j+1 może powrócić widok plasterków ramki danych lub może odesłać. Może to mylić pandy.

Jeśli nie używasz .loc, kończysz wywoływanie wszystkich 3 warunków w serii, co prowadzi do problemu o nazwie przykuty indeksowanie. Gdy używasz .loc, jednak masz dostęp do wszystkich warunków w jednym kroku i pandy nie są już zdezorientowane.

Możesz przeczytać więcej na ten temat wraz z przykładami, kiedy nie używać .loc spowoduje niepowodzenie operacji w pandas documentation.

Odpowiedź jest prosta, że ​​choć często można uciec z nieużywania .loc i wpisanie (na przykład)

df['Age_fill'][(df.Age.isnull()) & (df.Gender == i) & (df.Pclass == j+1)] \ 
                  = median_ages[i,j] 

zawsze otrzymasz ostrzeżenie SettingWithCopy i Twój kod będzie trochę bałaganu na to.

Z mojego doświadczenia wynika, że ​​.loc zajęło mi trochę czasu, aby mi przeszkadzać i było trochę denerwujące, aktualizując mój kod. Ale jest naprawdę bardzo prosty i bardzo intuicyjny: df.loc[row_index,col_indexer].

Więcej informacji można znaleźć w dokumentacji pandy na stronie Indexing and Selecting Data.