it-swarm.com.de

Wie bekomme ich die erste Spalte eines Pandas DataFrame als Serie?

Ich habe es versucht:

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

Und s erhält einen DataFrame, keine Serie.

98
Yariv
>>> 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'>
>>>

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

UPDATE

Wenn Sie dies nach Juni 2017 lesen, wurde ix in Pandas 0.20.2 nicht mehr empfohlen, verwenden Sie es also nicht. Verwenden Sie stattdessen loc oder iloc. Siehe Kommentare und andere Antworten auf diese Frage.

103
herrfz

Sie können die erste Spalte als Serie mit folgendem Code erhalten:

x[x.columns[0]]
86
HYRY

Ab v0.11 + ... verwenden Sie df.iloc.

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

Ist das nicht der einfachste Weg?

Nach Spaltenname:

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
11
SamJ

Dies funktioniert hervorragend, wenn Sie eine Serie aus einer CSV-Datei laden möchten

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