Panda DataFrame'in ilk sütununu Seri olarak nasıl alabilirim?


143

Denedim:

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

Ve sbir Seri değil, bir DataFrame alır.

Yanıtlar:


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

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

GÜNCELLEME

Haziran 2017'den sonra ixbunu okuyorsanız, 0.20.2 pandalarında kullanımdan kaldırılmıştır, bu yüzden kullanmayın. Kullanın locveya ilocbunun yerine. Bu sorunun yorumlarına ve diğer yanıtlarına bakın.


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

4
.İloc alternatifini eklemeye değer (Jeff, bu sayfada daha aşağıda önerildiği gibi), çünkü adlar için sayı içeren sütunların varlığında belirsiz değildir.
sapo_cosmico

4
Cevap 2013 yılında verilmiştir; hatırladığım kadarıyla, .iloco zamanlar henüz orada değildi. 2016'da doğru cevap Jeff'in (sonuçta o pandasTanrı'dır, sana bak ;-)). API değişikliğinden kaynaklanan yanıtların güncellenmesine ilişkin SO'nun politikasının ne olduğundan emin değilim; Dürüst olmak gerekirse bu cevap için oy sayısı şaşırdım, insanlar için yararlı olduğunu düşünmüyordu ...
Herrfz

2
Başka not: ixedildi kaldırılmış sürümü 0.20 yılında.
ayhan

5
ixArtık kullanılmamalıdır kullanmak ilocyerine: s = df.ix[:,0]. Bkz Bu yayını bir karşılaştırma için ilocve ix.
normanius

117

V0.11 + 'dan ... kullanın df.iloc.

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

3
Bu, yeni sürümlerle ve eski sürümlerle en uyumlu sürümdür. Ve dev geliştirme ekibi resmi olarak bu yaklaşımı resmi olarak desteklediğinden muhtemelen en verimlidir.
gaborous

116

İlk sütunu aşağıdaki kodu kullanarak Seri olarak alabilirsiniz:

x[x.columns[0]]

böyle son sütunu nasıl alabilirim?
Polly

Diğerleri de iyi çalışıyor, ancak bu daha sezgisel görünüyor.
elPastor

6
Aynı ada sahip birden çok sütun varsa, bu iyi değildir. Sütun adlarının benzersiz olup olmayacağı ayrı bir tartışmadır.
Vishal

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

13

Bu en basit yol değil mi?

Sütun adına göre:

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
Bu özel durumda, ilk sütunun adını ("x") biliyorsunuz, ancak sorunun anlamı şuydu: "İlk sütuna nasıl erişebilirim, adının REGARDLESS". Ayrıca, this ( df.x) gibi sütunlara erişmek genel değildir - sütun adı boşluk içeriyorsa? Sütunun DataFrameadı -s öznitelik adıyla çakışıyorsa ne olur ? Kullanarak sütunlara erişmek daha geneldir __getitem__(örneğin:) df["x"].
Ponadto

2
Sütunun başlığında örneğin boşluklar varsa da çalışmaz.
Jean-François Corbett

3

Bir csv dosyasından bir seri yüklemek istediğinizde bu harika çalışıyor

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

burada i/ sütun sayısı pozisyonu (başlayarak, 0 ).

Yani, i = 0ilk sütun için.

Ayrıca son sütunu kullanarak i = -1

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.