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']
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)
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)
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!)
>>> 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']
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
Surprins am't văzut acest postat până acum, așa că am'll las aici.
[*df]
și PrieteniiDespachetarea 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
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.
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)
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.
În codul mi se pare mai explicit de-a face
df.columns
Pentru că a spune altora citit codul ceea ce faci.
%%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)
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.
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.
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()