Wat is de beste manier om kolommen in panda’s te verwijderen

Ik stel deze vraag voor mijn zelfstudie. Voor zover ik weet, zijn de volgende methoden de verschillende methoden om kolommen in panda’s dataframe te verwijderen.

Optie – 1:

df=pd.DataFrame({'a':[1,2,3,4,5],'b':[6,7,8,9,10],'c':[11,12,13,14,15]})
del df['a']

Optie – 2:

df=pd.DataFrame({'a':[1,2,3,4,5],'b':[6,7,8,9,10],'c':[11,12,13,14,15]})
df=df.drop('a',1)

Optie – 3:

df=pd.DataFrame({'a':[1,2,3,4,5],'b':[6,7,8,9,10],'c':[11,12,13,14,15]})
df=df[['b','c']]
  1. Wat is de beste aanpak hiervan?
  2. Andere benaderingen om hetzelfde te bereiken?

Antwoord 1, autoriteit 100%

Volg de doc:

DataFrame is een 2-dimensionaal gelabelde gegevensstructuurmet kolommen van mogelijk verschillende typen.

En pandas.DataFrame.drop:

Laat opgegeven labels vallenuit rijen of kolommen.

Dus ik denk dat we het bij df.dropmoeten houden. Waarom? Ik denk dat de voordelen zijn:

  1. Het geeft ons meer controle over de verwijderactie:

    # This will return a NEW DataFrame object, leave the original `df` untouched.
    df.drop('a', axis=1)  
    # This will modify the `df` inplace. **And return a `None`**.
    df.drop('a', axis=1, inplace=True)  
    
  2. Het kan meer gecompliceerde gevallen aan met zijn argumenten. bijv. met levelkunnen we het verwijderen van MultiIndex aan. En met errorskunnen we enkele bugs voorkomen.

  3. Het is een meer uniforme en objectgeoriënteerde manier.


En net zoals @jezrael opmerkte in zijn antwoord:

Optie 1: Het gebruik van trefwoord delis een beperkte manier.

Optie 3: En df=df[['b','c']]is in wezen niet eens een verwijdering. Het selecteert eerst gegevens door te indexerenmet []syntaxis, ontbind dan de naam dfmet het originele DataFrame en bind het met het nieuwe (dwz df[['b','c']]).


Antwoord 2, autoriteit 33%

De aanbevolen manier om een ​​kolom of rij in panda’s-dataframes te verwijderen, is met behulp van drop.

Om een ​​kolom te verwijderen,

df.drop('column_name', axis=1, inplace=True)

Om een ​​rij te verwijderen,

df.drop('row_index', axis=0, inplace=True)

Je kunt dit berichtraadplegen om een ​​gedetailleerd gesprek te zien over benaderingen voor het verwijderen van kolommen.


Antwoord 3, autoriteit 15%

Vanuit een snelheidsperspectief lijkt optie 1 de beste. Op basis van de andere antwoorden betekent dit natuurlijk niet dat dit de beste optie is.

In [52]: import timeit
In [53]: s1 = """
    ...: import pandas as pd
    ...: df=pd.DataFrame({'a':[1,2,3,4,5],'b':[6,7,8,9,10],'c':[11,12,13,14,15]})
    ...: del df['a']
    ...: """
In [54]: s2 = """
    ...: import pandas as pd
    ...: df=pd.DataFrame({'a':[1,2,3,4,5],'b':[6,7,8,9,10],'c':[11,12,13,14,15]})
    ...: df=df.drop('a',1)
    ...: """
In [55]: s3 = """
    ...: import pandas as pd
    ...: df=pd.DataFrame({'a':[1,2,3,4,5],'b':[6,7,8,9,10],'c':[11,12,13,14,15]})
    ...: df=df[['b','c']]
    ...: """
In [56]: timeit.timeit(stmt=s1, number=100000)
Out[56]: 53.37321400642395
In [57]: timeit.timeit(stmt=s2, number=100000)
Out[57]: 79.68139410018921
In [58]: timeit.timeit(stmt=s3, number=100000)
Out[58]: 76.25269913673401

Antwoord 4, autoriteit 7%

Naar mijn mening is het het beste om optie 2 en 3 te gebruiken, omdat eerst limieten zijn – je kunt slechts één kolom verwijderen en kunt punt niet gebruiken notatiedel df.a.

3.solution is niet verwijderen, maar selecteren en piRSquaredeen mooi antwoord maken voor meerdere mogelijke oplossingen met hetzelfde idee.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

13 − 12 =

Other episodes