Come ottenere la prima colonna di un DataFrame di Panda come serie?


143

Provai:

x=pandas.DataFrame(...)
s = x.take([0], axis=1)

E sottiene un DataFrame, non una serie.

Risposte:


142
>>> import pandas as pd
>>> df = pd.DataFrame({'x' : [1, 2, 3, 4], 'y' : [4, 5, 6, 7]})
>>> df
   x  y
0  1  4
1  2  5
2  3  6
3  4  7
>>> s = df.ix[:,0]
>>> type(s)
<class 'pandas.core.series.Series'>
>>>

================================================== =========================

AGGIORNARE

Se stai leggendo questo dopo giugno 2017, ixè stato deprecato in Panda 0.20.2, quindi non usarlo. Usa loco ilocinvece. Vedi commenti e altre risposte a questa domanda.


4
df.set_index('x').y
Herrfz,

4
Varrebbe la pena aggiungere l'alternativa .iloc (come proposto da Jeff più in basso in questa pagina), in quanto non è ambiguo in presenza di colonne con numeri per i nomi.
sapo_cosmico,

4
La risposta è stata data nel 2013; per quanto mi ricordo, .ilocnon c'era ancora allora. Nel 2016, la risposta corretta è quella di Jeff (dopo tutto è pandasDio, intendiamoci ;-)). Non sono sicuro di quale sia la politica di SO in merito all'aggiornamento delle risposte dovuto alla modifica dell'API; Sono sinceramente sorpreso dal numero di voti per questa risposta, non pensavo fosse così utile per le persone ...
herrfz,

2
Un'altra nota: è ixstato deprecato nella versione 0.20.
Ayhan,

5
ixnon dovrebbe essere usato più, utilizzare ilocinvece: s = df.ix[:,0]. Vedi questo post per un confronto di iloce ix.
normanio

117

Da v0.11 +, ... usare df.iloc.

In [7]: df.iloc[:,0]
Out[7]: 
0    1
1    2
2    3
3    4
Name: x, dtype: int64

3
Questa è la versione più compatibile con le nuove versioni e anche con quelle precedenti. E probabilmente il più efficace dal momento che il team di sviluppo sta promuovendo ufficialmente questo approccio.
Gaborous,

116

Puoi ottenere la prima colonna come una serie dal seguente codice:

x[x.columns[0]]

come posso ottenere l'ultima colonna in quel modo?
Polly,

Anche gli altri funzionano bene, ma questo sembra più intuitivo.
elPastor

6
Questo non va bene se hai più colonne con lo stesso nome. Se i nomi delle colonne debbano essere univoci o meno è una discussione separata.
Vishal,

@Pollyx[x.columns[x.columns.size-1]]
fujianjin6471,

13

Non è questo il modo più semplice?

Per nome colonna:

In [20]: df = pd.DataFrame({'x' : [1, 2, 3, 4], 'y' : [4, 5, 6, 7]})
In [21]: df
Out[21]:
    x   y
0   1   4
1   2   5
2   3   6
3   4   7

In [23]: df.x
Out[23]:
0    1
1    2
2    3
3    4
Name: x, dtype: int64

In [24]: type(df.x)
Out[24]:
pandas.core.series.Series

9
In questo caso particolare conosci il nome della prima colonna ("x"), ma il significato della domanda era: "Come posso accedere alla prima colonna, A prescindere dal suo nome". Inoltre, accedere a colonne come questa ( df.x) non è generico: cosa succede se il nome della colonna contiene spazi? Cosa succede se il nome della colonna coincide con il DataFramenome dell'attributo -s? È più generale accedere alle colonne usando __getitem__(cioè in questo modo:) df["x"].
ponadto,

2
Inoltre, non funziona se l'intestazione della colonna contiene ad esempio spazi.
Jean-François Corbett,

3

Funziona benissimo quando vuoi caricare una serie da un file CSV

x = pd.read_csv('x.csv', index_col=False, names=['x'],header=None).iloc[:,0]
print(type(x))
print(x.head(10))


<class 'pandas.core.series.Series'>
0    110.96
1    119.40
2    135.89
3    152.32
4    192.91
5    177.20
6    181.16
7    177.30
8    200.13
9    235.41
Name: x, dtype: float64

0
df[df.columns[i]]

dove si itrova la posizione / numero della colonna (a partire da 0 ).

Quindi, i = 0è per la prima colonna.

Puoi anche ottenere l'ultima colonna usando i = -1

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.