Hoe selecteer je alle kolommen, behalve één kolom in panda’s?

Ik heb een dataframe dat er als volgt uitziet:

import pandas
import numpy as np
df = DataFrame(np.random.rand(4,4), columns = list('abcd'))
df
      a         b         c         d
0  0.418762  0.042369  0.869203  0.972314
1  0.991058  0.510228  0.594784  0.534366
2  0.407472  0.259811  0.396664  0.894202
3  0.726168  0.139531  0.324932  0.906575

Hoe krijg ik alle kolommen behalve column b?


Antwoord 1, autoriteit 100%

Als de kolommen geen MultiIndex zijn, is df.columnsslechts een reeks kolomnamen, zodat u het volgende kunt doen:

df.loc[:, df.columns != 'b']
          a         c         d
0  0.561196  0.013768  0.772827
1  0.882641  0.615396  0.075381
2  0.368824  0.651378  0.397203
3  0.788730  0.568099  0.869127

Antwoord 2, autoriteit 55%

Gebruik ixniet. Het is verouderd. De meest leesbare en idiomatische manier om dit te doen is df.drop():

>>> df
          a         b         c         d
0  0.175127  0.191051  0.382122  0.869242
1  0.414376  0.300502  0.554819  0.497524
2  0.142878  0.406830  0.314240  0.093132
3  0.337368  0.851783  0.933441  0.949598
>>> df.drop('b', axis=1)
          a         c         d
0  0.175127  0.382122  0.869242
1  0.414376  0.554819  0.497524
2  0.142878  0.314240  0.093132
3  0.337368  0.933441  0.949598

Houd er rekening mee dat .drop()standaard niet werkt; ondanks de onheilspellende naam blijft dfongedeerd door dit proces. Als je bpermanent uit dfwilt verwijderen, doe dan df.drop('b', inplace=True).

df.drop()accepteert ook een lijst met labels, b.v. df.drop(['a', 'b'], axis=1)laat kolom aen bvallen.


Antwoord 3, autoriteit 28%

df[df.columns.difference(['b'])]
Out: 
          a         c         d
0  0.427809  0.459807  0.333869
1  0.678031  0.668346  0.645951
2  0.996573  0.673730  0.314911
3  0.786942  0.719665  0.330833

Antwoord 4, autoriteit 19%

U kunt df.columns.isin(). gebruiken

df.loc[:, ~df.columns.isin(['b'])]

Als u meerdere kolommen wilt verwijderen, zo eenvoudig als:

df.loc[:, ~df.columns.isin(['col1', 'col2'])]

Antwoord 5, autoriteit 3%

Je kunt dropkolommen in index:

df[df.columns.drop('b')]

of

df.loc[:, df.columns.drop('b')]

Uitvoer:

         a         c         d
0  0.418762  0.869203  0.972314
1  0.991058  0.594784  0.534366
2  0.407472  0.396664  0.894202
3  0.726168  0.324932  0.906575

Antwoord 6, autoriteit 2%

Hier is een andere manier:

df[[i for i in list(df.columns) if i != '<your column>']]

Je geeft gewoon alle kolommen door die getoond moeten worden, behalve degene die je niet wilt.

Other episodes