Cum se șterg toate coloanele din DataFrame, cu excepția anumitor coloane? (Programare, Python, Pandas, Dataframe)

sgerbhctim a intrebat.

Să spunem că am un DataFrame care arată așa:

a  b  c  d  e  f  g  
1  2  3  4  5  6  7
4  3  7  1  6  9  4
8  9  0  2  4  2  1

Cum aș putea să șterg toate coloanele în afară de a și b?

Acest lucru ar avea ca rezultat:

a  b
1  2
4  3
8  9

Aș dori o modalitate de a le șterge folosind o simplă linie de cod care să spună: „delete all columns besides a și b, pentru că, să spunem că, ipotetic, am 1000 de coloane de date.

Vă mulțumesc.

5 răspunsuri
MaxU
In [48]: df.drop(df.columns.difference(['a','b']), 1, inplace=True)
Out[48]:
   a  b
0  1  2
1  4  3
2  8  9

sau:

In [55]: df = df.loc[:, df.columns.intersection(['a','b'])]

In [56]: df
Out[56]:
   a  b
0  1  2
1  4  3
2  8  9

PS vă rog să aveți în vedere că cel mai idiomatic mod Pandas de a face acest lucru a fost deja propus de @Wen:

df = df[['a','b']]

sau

df = df.loc[:, ['a','b']]

Comentarii

  • există vreo diferență în ceea ce privește performanța sau ceva de genul acesta atunci când folosiți inplace, o întrebare mai generală ar fi df.drop(….inplace=True) vs df = df[…] orice sugestie –  > Por PirateApp.
  • @PirateApp, s-ar putea să existe o diferență minimă. V-aș recomanda să citiți acest răspuns de la unul dintre principalii dezvoltatori Pandas, Jeff, și comentariile de sub acest răspuns… –  > Por MaxU.
  • @MaxU Cred că df.loc este mult mai rapidă decât orice altă metodă precum drop sau filter pentru procesarea a milioane de înregistrări. Vă rog să mă corectați dacă mă înșel. –  > Por Abu Shoeb.
GollyJer

O altă opțiune de adăugat la amestec. Prefer această abordare pentru lizibilitate.

df = df.filter(['a', 'b'])

În cazul în care primul argument pozițional este items=[]


Bonus

De asemenea, puteți utiliza un like argument sau regex pentru a filtra.
Este util dacă aveți un set de coloane precum ['a_1','a_2','b_1','b_2']

Puteți face

df = df.filter(like='b_')

și să obțineți în final ['b_1','b_2']

documentația Pandas pentru filtru.

BENY

există mai multe soluții .

df = df[['a','b']] #1

df = df[list('ab')] #2

df = df.loc[:,df.columns.isin(['a','b'])] #3

df = pd.DataFrame(data=df.eval('a,b').T,columns=['a','b']) #4 PS:I do not recommend this method , but still a way to achieve this 

Comentarii

  • df = df[['a','b']] dacă doriți să lucrați pe subset. –  > Por Zero.
Taie

Dacă aveți mai mult de două coloane pe care doriți să le eliminați, să zicem 20 sau 30, , puteți folosi și liste. Asigurați-vă că specificați și valoarea axei.

drop_list = ["a","b"]
df = df.drop(df.columns.difference(drop_list), axis=1)

Isaac Taylor

Dacă doriți să păstrați doar mai multe coloane decât cele pe care le eliminați, puneți un „~” înainte de instrucțiunea .isin pentru a selecta toate coloanele, cu excepția celor pe care le doriți:

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

Comentarii

  • Acesta este singurul răspuns. „drop columns except”. Mulțumesc, asta căutam. –  > Por Natacha.