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.columns
slechts 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 ix
niet. 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 df
ongedeerd door dit proces. Als je b
permanent uit df
wilt 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 a
en b
vallen.
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 drop
kolommen 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.