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.