Bagaimana cara mendapatkan kolom pertama dari panda DataFrame sebagai Seri?


142

Saya mencoba:

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

Dan smendapat DataFrame, bukan Seri.

Jawaban:


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

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

MEMPERBARUI

Jika Anda membaca ini setelah Juni 2017, ixtelah ditinggalkan dalam panda 0.20.2, jadi jangan gunakan itu. Gunakan locatau ilocsebagai gantinya. Lihat komentar dan jawaban lain untuk pertanyaan ini.


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

4
Layak menambahkan alternatif .iloc (seperti yang diusulkan oleh Jeff lebih lanjut di halaman ini), karena tidak ambigu di hadapan kolom dengan angka untuk nama.
sapo_cosmico

4
Jawabannya diberikan pada 2013; sejauh yang saya ingat, .ilocbelum ada di sana saat itu. Pada tahun 2016, jawaban yang benar adalah milik Jeff (lagipula dia adalah pandasTuhan, ingatlah ;-)). Saya tidak yakin apa kebijakan SO mengenai pembaruan jawaban karena perubahan API; Jujur saya terkejut dengan jumlah suara untuk jawaban ini, tidak berpikir itu berguna bagi orang-orang ...
herrfz

2
Catatan lain: ixsudah tidak digunakan lagi dalam versi 0.20.
ayhan

5
ixtidak boleh digunakan lagi, gunakan ilocsebagai gantinya: s = df.ix[:,0]. Lihat posting ini untuk perbandingan ilocdan ix.
normanius

117

Dari v0.11 +, ... gunakan df.iloc.

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

3
Ini adalah versi yang paling kompatibel dengan rilis baru dan juga dengan yang lama. Dan mungkin yang paling efisien karena tim dev secara resmi mempromosikan pendekatan ini.
Gaborous

116

Anda bisa mendapatkan kolom pertama sebagai Seri dengan kode berikut:

x[x.columns[0]]

bagaimana saya bisa mendapatkan kolom terakhir seperti itu?
Polly

Yang lain juga berfungsi dengan baik, tetapi yang ini tampaknya lebih intuitif.
elPastor

6
Ini tidak baik jika Anda memiliki beberapa kolom dengan nama yang sama. Apakah nama kolom harus unik atau tidak adalah diskusi terpisah.
Vishal

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

13

Bukankah ini cara yang paling sederhana?

Menurut nama kolom:

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
Dalam kasus khusus ini Anda tahu nama kolom pertama ("x"), tetapi yang dimaksud adalah: "Bagaimana saya bisa mengakses kolom pertama, TERKAIT DENGAN NAMA itu". Juga, mengakses kolom seperti ini ( df.x) bukan generik - bagaimana jika nama kolom berisi spasi? Bagaimana jika nama kolom bertepatan dengan DataFramenama atribut -s? Ini lebih umum untuk mengakses kolom menggunakan __getitem__(yaitu seperti:) df["x"].
ponadto

2
Juga tidak berfungsi jika tajuk kolom memiliki misalnya spasi di dalamnya.
Jean-François Corbett

3

Ini berfungsi dengan baik ketika Anda ingin memuat seri dari 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]]

di mana iposisi / nomor kolom (mulai dari 0 ).

Begitu, i = 0 untuk kolom pertama.

Anda juga bisa mendapatkan kolom terakhir menggunakan i = -1

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.