Jak zdobyć pierwszą kolumnę pandy DataFrame jako serię?


Odpowiedzi:


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

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

AKTUALIZACJA

Jeśli czytasz to po czerwcu 2017 r., ixZostało wycofane w pandach 0.20.2, więc nie używaj go. Użyj loclub iloczamiast. Zobacz komentarze i inne odpowiedzi na to pytanie.


4
df.set_index('x').y
herrfz

4
Warto byłoby dodać alternatywę .iloc (zgodnie z propozycją Jeffa w dalszej części tej strony), ponieważ nie jest ona niejednoznaczna w obecności kolumn z numerami nazw.
sapo_cosmico

4
Odpowiedź została udzielona w 2013 roku; o ile pamiętam, .ilocwtedy jeszcze nie było. W 2016 roku prawidłowa odpowiedź brzmi: Jeff (w końcu jest pandasBogiem ;-)). Nie jestem pewien, jakie są zasady SO dotyczące aktualizacji odpowiedzi w związku ze zmianą API; Jestem szczerze zaskoczony przez liczbę głosów oddanych na tę odpowiedź, nie sądzę, że było to użyteczne dla ludzi ...
herrfz

2
Kolejna uwaga: ixzostała wycofana w wersji 0.20.
ayhan

5
ixNie należy stosować więcej, użyj iloczamiast: s = df.ix[:,0]. Zobacz ten post, aby zobaczyć porównanie iloci ix.
normanius

117

Od v0.11 +, ... użyj df.iloc.

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

3
Jest to najbardziej kompatybilna wersja z nowymi wydaniami, a także ze starymi. I prawdopodobnie najbardziej efektywny, ponieważ zespół programistów oficjalnie promuje to podejście.
hałaśliwy

116

Możesz pobrać pierwszą kolumnę jako serię, korzystając z następującego kodu:

x[x.columns[0]]

jak mogę dostać ostatnią taką kolumnę?
Polly,

Inne również działają dobrze, ale ten wydaje się bardziej intuicyjny.
elPastor

6
Nie jest to dobre, jeśli masz wiele kolumn o tej samej nazwie. To, czy nazwy kolumn powinny być unikalne, czy nie, to osobna dyskusja.
Vishal

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

13

Czy to nie jest najprostszy sposób?

Według nazwy kolumny:

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
W tym konkretnym przypadku znasz nazwę pierwszej kolumny („x”), ale pytanie oznaczało: „Jak mogę uzyskać dostęp do pierwszej kolumny, NIEZALEŻNIE od jej nazwy”. Również dostęp do kolumn takich jak ta ( df.x) nie jest ogólny - a co, jeśli nazwa kolumny zawiera spacje? Co się stanie, jeśli nazwa kolumny pokrywa się z DataFramenazwą atrybutu -s? Bardziej ogólne jest uzyskiwanie dostępu do kolumn za pomocą __getitem__(tj. Tak df["x"]:).
ponadto

2
Nie działa również, jeśli nagłówek kolumny zawiera np. Spacje.
Jean-François Corbett

3

Działa to świetnie, gdy chcesz załadować serię z pliku 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]]

gdzie ijest pozycją / numerem kolumny (zaczynając od 0 ).

Tak i = 0jest w pierwszej kolumnie.

Możesz również pobrać ostatnią kolumnę za pomocą i = -1

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.