Pandas DataFrame'den bir değer nasıl alınır, dizin ve nesne türünden değil


104

Aşağıdaki DataFrame'e sahip olduğumu varsayalım

Mektup numarası
A 1
B 2
C 3
D 4

Aşağıdaki kod aracılığıyla elde edilebilir

import pandas as pd

letters=pd.Series(('A', 'B', 'C', 'D'))
numbers=pd.Series((1, 2, 3, 4))
keys=('Letters', 'Numbers')
df=pd.concat((letters, numbers), axis=1, keys=keys)

Şimdi C değerini Harfler sütunundan almak istiyorum.

Komut satırı

df[df.Letters=='C'].Letters

dönecek

2 C
İsim: Harfler, dtype: nesne

İki satır çıktısının tamamını değil de yalnızca C değerini nasıl elde edebilirim?


6
İlgisiz bir kayda göre, DataFrame'inizi oluşturmanın daha güzel bir yolu var:pd.DataFrame({'Letters': letters, 'Numbers': numbers})
JoeCondron

Yanıtlar:


144
df[df.Letters=='C'].Letters.item()

Bu, bu seçimden döndürülen Dizin / Serideki ilk öğeyi döndürür. Bu durumda, değer her zaman ilk öğedir.

DÜZENLE:

Veya bir loc () çalıştırabilir ve bu şekilde ilk öğeye erişebilirsiniz. Bu daha kısaydı ve geçmişte uyguladığım yol buydu.


2
Bu yöntemi seviyorum, ancak şu uyarıyı alıyorum:FutureWarning: "item" has been deprecated and will be removed in a future version
AlexG

2
@AlexG: Bunun yerine bu kullanabilirsiniz: df[df.Letters=='C'].Letters.iloc[0]. Sonuç serisindeki ilk öğeyi (aynı zamanda benzersiz olan) üretir.
Anh-Thi DINH

loc [: 1] kullanmak hala değerin yanındaki dizini gösterir :(
Sonic Soul

@AlexG ve @Sonic Soul: df[df.Letters=='C'].Letters.squeeze()bunun yerine kullanmayı deneyin . Bu aynı şekilde çalışır. :)
user78910

52

valuesDeğerleri bir np dizisi olarak döndürmek için özniteliği kullanın ve ardından [0]ilk değeri almak için kullanın :

In [4]:
df.loc[df.Letters=='C','Letters'].values[0]

Out[4]:
'C'

DÜZENLE

Kişisel olarak, alt simge operatörlerini kullanarak sütunlara erişmeyi tercih ediyorum:

df.loc[df['Letters'] == 'C', 'Letters'].values[0]

Bu, sütun adlarının boşluklar veya kısa çizgiler içerebileceği ve bu da -kullanarak erişildiği anlamına gelen sorunları önler ..


1
Kişisel .olarak sütunlara erişmek için kullanmıyorum, çünkü bu her zaman işe yaramayacak, örneğin sütun adı sayısal bir değerle başlıyorsa veya sütun adında boşluk gibi alfa olmayan karakterler varsa, bu yüzden her zaman tercih ederimdf['col_name']
EdChum

Anlıyorum. Bu yüzden baktığım her yerde, df['col_name']notasyon yerine notasyonu her zaman buldum .. Tekrar teşekkürler.
Eduardo

1
Gerçekten önemsizdir, ancak seçiminizde nokta gösterimini kullanarak 'Harfler' sütununa erişirsiniz; df.loc [df.Letters == 'C']. Sütun adlarınızda boşluklar varsa, bir CSV veya Excel dosyasından içe aktarırken yaptığınız gibi, muhtemelen dönüştürücüler kullanarak bunları çıkarmanız gerekir.
valkn0t

@ thomas-ato Cevabımı güncelleyeceğim, ancak gerekli olmadıkça ek bir adım olarak sütunların değiştirilmesine katılmıyorum, bu durumda bunun bir fark
yaratmayacağını

1
import pandas as pd

dataset = pd.read_csv("data.csv")
values = list(x for x in dataset["column name"])

>>> values[0]
'item_0'

Düzenle:

aslında, veri kümesini herhangi bir eski dizi gibi dizine alabilirsiniz.

import pandas as pd

dataset = pd.read_csv("data.csv")
first_value = dataset["column name"][0]

>>> print(first_value)
'item_0'
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.