Ia lista de la panda DataFrame anteturile de coloană

Vreau pentru a obține o listă de antete de coloană dintr-un panda DataFrame. DataFrame va veni de la utilizator, astfel încât am câștigat't știu cât de multe coloane vor fi sau ce va fi numit.

De exemplu, dacă am'm a dat un DataFrame astfel:

>>> my_dataframe
    y  gdp  cap
0   1    2    5
1   2    3    9
2   8    7    2
3   3    4    7
4   6    7    7
5   4    8    3
6   8    2    8
7   9    9   10
8   6    6    4
9  10   10    7

Aș dori pentru a obține o listă de genul asta:

>>> header_list
['y', 'gdp', 'cap']
Soluția

Puteți obține valori ca o listă de a face:

list(my_dataframe.columns.values)

De asemenea, puteți folosi pur și simplu: (așa cum se arată în Ed Chum's a răspunde):

list(my_dataframe)
Comentarii (10)

Există o construit în metoda care este cel mai performant:

my_dataframe.columns.values.tolist()

.coloane returnează un Index .coloane.valorile returnează o matrice și acest lucru are o functie helper .tolist pentru a returna o listă.

Dacă performanța nu este la fel de important pentru tine, "Index" obiecte defini o .tolist() metoda care puteți apela direct:

my_dataframe.columns.tolist()

Diferența de performanță este evident:

%timeit df.columns.tolist()
16.7 µs ± 317 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

%timeit df.columns.values.tolist()
1.24 µs ± 12.3 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

Pentru cei care urăsc să tastați, puteți apela doar "lista" pe "df", astfel:

list(df)
Comentarii (6)

A făcut niște teste rapide, și, deloc surprinzător versiunea built-in, folosind dataframe.coloane.valori.tolist() este cel mai rapid:

In [1]: %timeit [column for column in df]
1000 loops, best of 3: 81.6 µs per loop

In [2]: %timeit df.columns.values.tolist()
10000 loops, best of 3: 16.1 µs per loop

In [3]: %timeit list(df)
10000 loops, best of 3: 44.9 µs per loop

In [4]: % timeit list(df.columns.values)
10000 loops, best of 3: 38.4 µs per loop

(Eu încă place foarte mult lista(dataframe)`, deși, așa multumesc EdChum!)

Comentarii (0)

Sale devine și mai simplă (de panda 0.16.0) :

df.columns.tolist()

va dau nume de coloană într-o listă.

Comentarii (0)
>>> list(my_dataframe)
['y', 'gdp', 'cap']

Pentru a lista de coloane a unei dataframe în timp ce în debugger modul de a folosi o listă de înțelegere:

>>> [c for c in my_dataframe]
['y', 'gdp', 'cap']

Apropo, puteți obține o listă sortată pur și simplu prin utilizarea rezolvat:

>>> sorted(my_dataframe)
['cap', 'gdp', 'y']
Comentarii (2)

Ca's disponibil ca my_dataframe.coloane.

Comentarii (2)

L's interesante, dar df.coloane.valori.tolist() este de aproape 3 ori mai repede atunci `df.coloane.tolist () "" dar am crezut că sunt la fel:

In [97]: %timeit df.columns.values.tolist()
100000 loops, best of 3: 2.97 µs per loop

In [98]: %timeit df.columns.tolist()
10000 loops, best of 3: 9.67 µs per loop
Comentarii (1)

Surprins am't văzut acest postat până acum, așa că am'll las aici.

Extinsă Iterable Despachetarea (python3.5+): [*df] și Prietenii

Despachetarea generalizări (PEP 448) au fost introduse cu Python 3.5. Deci, următoarele operațiuni sunt toate posibile.

df = pd.DataFrame('x', columns=['A', 'B', 'C'], index=range(5))
df

   A  B  C
0  x  x  x
1  x  x  x
2  x  x  x
3  x  x  x
4  x  x  x 

<!- >

Daca vrei o "lista"....

[*df]
# ['A', 'B', 'C']

Sau, dacă vrei un "set",

{*df}
# {'A', 'B', 'C'}

Sau, dacă doriți un tuplu`,

*df,  # Please note the trailing comma
# ('A', 'B', 'C')

Sau, dacă doriți pentru a stoca rezultatul pe undeva,

*cols, = df  # A wild comma appears, again
cols
# ['A', 'B', 'C']

... daca're genul de persoana care convertește cafea la tastarea sunete, ei bine, acest lucru se va consuma cafeaua mai eficient ;)

P. S.: dacă performanța este important, va doresc sa renunte la soluții de mai sus în favoarea

df.coloane.to_numpy().tolist()

['Un', 'B', 'C']

Acest lucru este similar cu Ed Chum's răspuns, dar actualizat pentru v0.24 unde.to_numpy()este preferat pentru utilizarea.valori`. Vezi acest răspuns (de mine) pentru mai multe informații.

Verificare Vizuală De când am'am văzut acest discutate în alte răspunsuri, puteți utiliza iterable despachetarea (nu este nevoie de explicit bucle).

print(*df)
A B C

print(*df, sep='\n')
A
B
C

Critica de Alte Metode

Don't de a folosi în mod explicit "pentru" buclă pentru o operație care se poate face într-o singură linie (List comprehensions sunt ok).

Apoi, folosind sortate(df) nu păstra ordinea inițială de coloane. Pentru asta, ar trebui să utilizați lista(df)` în loc.

Apoi, listă(df.coloane) " și " lista(df.coloane.valorile) sunt săraci sugestii (ca de versiunea curentă, v0.24). Ambele "Index" (revenit de la df.coloane) și NumPy matrice (returnat de df.coloane.valorile) defini .tolist() metoda care este mai rapid și mai idiomatice.

În cele din urmă, listification de exemplu, listă(df) ar trebui să fie utilizat numai ca un concis alternativă la metodele menționate anterior.

Comentarii (0)

O DataFrame urmează dict-cum ar fi convenția de iterarea peste "cheile" de obiecte.

my_dataframe.keys()

Creați o listă de chei/coloane - obiect metoda to_list() și pythonic mod

my_dataframe.keys().to_list()
list(my_dataframe.keys())

De bază repetare pe o DataFrame se întoarce coloana etichete

[column for column in my_dataframe]

Nu converti un DataFrame într-o listă, doar pentru a obține etichete de coloană. Nu te opri gândesc în timp ce caută pentru un mostre de cod.

xlarge = pd.DataFrame(np.arange(100000000).reshape(10000,10000))
list(xlarge) #compute time and memory consumption depend on dataframe size - O(N)
list(xlarge.keys()) #constant time operation - O(1)
Comentarii (2)

În Notebook-uri

Pentru explorarea datelor în IPython notebook, modul meu preferat este acesta:

sorted(df)

Care va produce un ușor de citit în ordine alfabetică lista ordonata.

Într-un depozit de cod

În codul mi se pare mai explicit de-a face

df.columns

Pentru că a spune altora citit codul ceea ce faci.

Comentarii (2)

%%datănu final_df.coloane.valori.tolist() 948 ns ± 19.2 ns pe buclă (spun ± std. dev. de 7 ruleaza, 1000000 bucle fiecare)

%%datănu lista(final_df.coloane) 14.2 µs ± 79.1 ns pe buclă (spun ± std. dev. de 7 ruleaza, 100000 bucle fiecare)

%%datănu lista(final_df.coloane.valori) 1.88 µs ± 11.7 ns pe buclă (spun ± std. dev. de 7 ruleaza, 1000000 bucle fiecare)

%%datănu final_df.coloane.tolist() 12.3 µs ± 27.4 ns pe buclă (spun ± std. dev. de 7 ruleaza, 100000 bucle fiecare)

%%datănu lista(final_df.cap(1).coloane) 163 µs ± 20.6 µs pe buclă (spun ± std. dev. de 7 ruleaza, 10000 bucle fiecare)

Comentarii (0)

ca răspuns de către Simeon Visser...ai putea face

list(my_dataframe.columns.values) 

sau

list(my_dataframe) # for less typing.

Dar cred că cel mai dulce loc este:

list(my_dataframe.columns)

Este explicită, în același timp, nu inutil de lung.

Comentarii (1)

Pentru un mod rapid, elegant, control vizual, încercați acest lucru:

for col in df.columns:
    print col
Comentarii (0)

Acest lucru ne dă nume de coloane într-o listă:

list(my_dataframe.columns)

O altă funcție numită tolist() pot fi folosite:

my_dataframe.columns.tolist()
Comentarii (1)

Mă simt întrebare merită o explicație suplimentară.

Ca @fixxxer menționat, răspunsul depinde de panda versiunea pe care o utilizați în proiectul dumneavoastră. Pe care le puteți obține cu pd.versiune` comanda.

Dacă sunteți pentru un motiv oarecare ca mine (pe debian jessie eu folosesc 0.14.1), folosind o versiune mai veche de panda decât 0.16.0, atunci ai nevoie pentru a utiliza:

df.tastele().tolist() pentru că nu există nici o df.coloane metoda puse în aplicare încă.

Avantajul acestei chei este metoda, care funcționează chiar și în noua versiune de panda, așa că's mai universal.

Comentarii (1)
n = []
for i in my_dataframe.columns:
    n.append(i)
print n
Comentarii (3)

Chiar dacă soluția asta a fost condiția de mai sus este frumos. De asemenea, aș aștepta la ceva de genul cadru.column_names() să fie o funcție în panda, dar din moment ce nu este, poate ar fi frumos să utilizați următoarea sintaxă. Cumva păstrează sentimentul că sunteți folosind panda într-un mod adecvat prin apelarea "tolist" funcția: cadru.coloane.tolist()

frame.columns.tolist() 
Comentarii (1)

Această soluție listează toate coloanele de obiect my_dataframe:

print(list(my_dataframe))
Comentarii (1)