Python – Pandas ‘.isin’ pe o listă (Programare, Python 2.7, Pandas)

DMML a intrebat.
a intrebat.

Folosesc Python 2.7 pe Mac OSX Lion și Pandas 0.11.0 cu shell-ul IPython.

Am o scurtă problemă, folosind metoda de selecție a datelor .isin.

Problema este că aș dori să folosesc .isin pe o listă de elemente, deci:

data = df[df[header[0]].isin(list)]

Primesc următoarea eroare atunci când fac acest lucru: KeyError: u'no item named '

Generez lista inițială prin apelarea unei funcții dezvoltate anterior. Am încercat să folosesc eval pe listă, ceea ce pare să rezolve o problemă care apare atunci când se utilizează raw_input și iterarea peste elementele din cadrul acesteia – încerc să rezolv unele dintre problemele pe care le-am avut la trecerea la IPython și Python 2.7 (inițial am folosit Python 3.3).

Am încercat, de asemenea, să iterăm peste listă, făcând mai întâi:

data = df[df[header[0]].isin(list[0])]

Dar și asta returnează: KeyError: u'no item named '

UPDATE:Aici este antetul:

 Unnamed: 0         9752  non-null values
 zipcode            9752  non-null values
 xcoord             9752  non-null values
 ycoord             9752  non-null values
 age_age5064        9752  non-null values
 age_age6574        9752  non-null values
 age_age75plus      9752  non-null values
 sex_female         9752  non-null values
 sex_male           9752  non-null values
 stage_early        9752  non-null values
 stage_late         9752  non-null values
 death_death        9752  non-null values
 death_not_death    9752  non-null values
 access             9752  non-null values
 dtypes: float64(2), int64(12)

De asemenea, am o funcție pe care o folosesc pentru a obține antetul, ceea ce îmi ușurează lucrurile, ieșirea arată astfel:

['',
  'zipcode',
  'xcoord',
  'ycoord',
 'age_age5064',
 'age_age6574',
 'age_age75plus',
 'sex_female',
 'sex_male',
 'stage_early',
 'stage_late',
 'death_death',
 'death_not_death',
 'access']

Ceea ce, de fapt, acum că mă gândesc la asta, ar putea fi cauza problemei, deși… eval totuși nu ar rezolva problema.

UPDATE 2:

Deci, inițial, după cum puteți vedea în imaginea de mai sus .isin, foloseam header[0], ceea ce nu era corect. Am încercat din nou să folosesc header[1], ceea ce este adecvat. Am primit următoarea eroare:

 TypeError: 'int' object is not iterable

De asemenea, am încercat din nou cu lista obișnuită și am primit următoarea eroare:

TypeError: int() argument must be a string or a number, not 'list'

Ceea ce, cred, vorbește mai definitiv despre problemă….

Comentarii

  • Este header o DataFrame?, Care este diferența între df și header? –  > Por waitingkuo.
  • În cadrul df[df[header[0]].isin(list)], antetul nu este un DataFrame. Este o listă de nume de coloane, care compun antetul. –  > Por DMML.
  • Cum ați obținut antetul? Prin df.columns? –  > Por waitingkuo.
  • Am obținut antetul prin apelarea unei funcții pe care am scris-o și care se numește getHeader, care literalmente doar returnează numele coloanelor, sub forma unei liste, dintr-un fișier CSV. –  > Por DMML.
  • Deși, am pus și rezultatul apelării lui DataFrame.columns, care se află chiar sub locul unde scrie „UPDATE”…  > Por DMML.
1 răspunsuri
waitingkuo

Încearcă să folosești în schimb df.columns ca antet:

df[df[df.columns[1]].isin(list)]