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.