¿Cómo obtener la primera columna de un pandas DataFrame como una serie?

Respuestas:

141
>>> 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'>
>>>

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

ACTUALIZAR

Si está leyendo esto después de junio de 2017, ixha quedado en desuso en pandas 0.20.2, así que no lo use. Uso loco en su iloclugar. Ver comentarios y otras respuestas a esta pregunta.

herrfz
fuente
44
df.set_index('x').y
herrfz
44
Valdría la pena agregar la alternativa .iloc (como propuso Jeff más abajo en esta página), ya que no es ambigua en presencia de columnas con números para los nombres.
sapo_cosmico
44
La respuesta se dio en 2013; Por lo que recuerdo, .iloctodavía no estaba allí en ese entonces. En 2016, la respuesta correcta es la de Jeff (después de todo, es pandasDios, ten en cuenta ;-)). No estoy seguro de cuál es la política de SO con respecto a la actualización de respuestas debido al cambio de API; Estoy sinceramente sorprendido por la cantidad de votos para esta respuesta, no pensé que fuera tan útil para las personas ...
herrfz
2
Otra nota: ixquedó en desuso en la versión 0.20.
ayhan
55
ixNo debe utilizarse más, utilice ilocen su lugar: s = df.ix[:,0]. Vea esta publicación para una comparación de ilocy ix.
normanius
117

Desde v0.11 +, ... uso df.iloc.

In [7]: df.iloc[:,0]
Out[7]: 
0    1
1    2
2    3
3    4
Name: x, dtype: int64
Jeff
fuente
3
Esta es la versión más compatible con los nuevos lanzamientos y también con los antiguos. Y probablemente el más eficiente ya que el equipo de desarrollo está promoviendo oficialmente este enfoque.
gaborous
116

Puede obtener la primera columna como Serie siguiendo el siguiente código:

x[x.columns[0]]
HYRY
fuente
¿Cómo puedo obtener la última columna así?
Polly
Los otros también funcionan bien, pero este parece más intuitivo.
elPastor
66
Esto no es bueno si tiene varias columnas con el mismo nombre. Si los nombres de columna deben ser únicos o no es una discusión separada.
Vishal
@Pollyx[x.columns[x.columns.size-1]]
fujianjin6471
13

¿No es esta la forma más simple?

Por nombre de columna:

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
SamJ
fuente
9
En este caso en particular, conoce el nombre de la primera columna ("x"), pero lo que significaba la pregunta era: "¿Cómo puedo acceder a la primera columna, SIN IMPORTAR su nombre?". Además, acceder a columnas como esta ( df.x) no es genérico: ¿qué sucede si el nombre de la columna contiene espacios? ¿Qué sucede si el nombre de la columna coincide con el DataFramenombre del atributo -s? Es más general acceder a las columnas usando __getitem__(es decir, así:) df["x"].
ponadto
2
Tampoco funciona si el encabezado de la columna tiene, por ejemplo, espacios.
Jean-François Corbett
3

Esto funciona muy bien cuando desea cargar una serie desde un archivo 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
Christopher Pfeifer
fuente
0
df[df.columns[i]]

donde ies la posición / número de la columna (a partir de 0 ).

Entonces, i = 0es para la primera columna.

También puede obtener la última columna usando i = -1

Ayan Kumar Saha
fuente