So erhalten Sie einen Wert aus einem Pandas DataFrame und nicht aus dem Index und dem Objekttyp

104

Angenommen, ich habe den folgenden DataFrame

Briefnummer
A 1
B 2
C 3
D 4

Welches kann durch den folgenden Code erhalten werden

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)

Jetzt möchte ich den Wert C aus der Spalte Buchstaben erhalten.

Die Befehlszeile

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

wird zurückkehren

2 C.
Name: Buchstaben, Typ: Objekt

Wie kann ich nur den Wert C und nicht die gesamte zweizeilige Ausgabe erhalten?

Eduardo
quelle
6
Unabhängig davon gibt es eine bessere Möglichkeit, Ihren DataFrame zu erstellen:pd.DataFrame({'Letters': letters, 'Numbers': numbers})
JoeCondron

Antworten:

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

Dies gibt das erste Element im Index / der Reihe zurück, das von dieser Auswahl zurückgegeben wurde. In diesem Fall ist der Wert immer das erste Element.

BEARBEITEN:

Oder Sie können loc () ausführen und auf diese Weise auf das erste Element zugreifen. Dies war kürzer und so habe ich es in der Vergangenheit umgesetzt.

valkn0t
quelle
2
Ich liebe diese Methode, aber ich bekomme die Warnung:FutureWarning: "item" has been deprecated and will be removed in a future version
AlexG
2
@AlexG: Sie können dies stattdessen verwenden : df[df.Letters=='C'].Letters.iloc[0]. Es erzeugt das erste Element (das auch das Unikat ist) in der Ergebnisreihe.
Anh-Thi DINH
Mit loc [: 1] wird weiterhin der Index neben dem Wert
Sonic Soul
@AlexG und @Sonic Soul: Versuchen Sie es df[df.Letters=='C'].Letters.squeeze()stattdessen. Dies funktioniert genauso. :)
user78910
52

Verwenden Sie das valuesAttribut, um die Werte als np-Array zurückzugeben, und verwenden Sie dann [0], um den ersten Wert abzurufen :

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

Out[4]:
'C'

BEARBEITEN

Ich persönlich bevorzuge den Zugriff auf die Spalten mit Indexoperatoren:

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

Dies vermeidet Probleme, bei denen die Spaltennamen Leerzeichen oder Bindestriche enthalten können, -die den Zugriff mit verwenden ..

EdChum
quelle
1
Ich persönlich verwende das nicht, .um auf Spalten zuzugreifen, da dies beispielsweise nicht immer funktioniert, wenn der Spaltenname mit einem numerischen Wert beginnt oder der Spaltenname keine Alpha-Zeichen enthält, z. B. ein Leerzeichen, daher bevorzuge ich immerdf['col_name']
EdChum
Aha. Deshalb habe ich überall, wo ich hinschaue, immer die df['col_name']Notation anstelle der .Notation gefunden. Danke noch einmal.
Eduardo
1
Es ist wirklich belanglos, aber in Ihrer Auswahl greifen Sie mit der Punktnotation auf die Spalte 'Buchstaben' zu. df.loc [df.Letters == 'C']. Wenn Ihre Spaltennamen Leerzeichen enthalten, sollten Sie wahrscheinlich Konverter verwenden, um diese zu entfernen, wie Sie es beim Importieren aus einer CSV- oder Excel-Datei tun würden.
valkn0t
@ Thomas-Ato Ich werde meine Antwort aktualisieren, aber ich bin nicht damit einverstanden, die Spalten als zusätzlichen Schritt zu
ändern
1
import pandas as pd

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

>>> values[0]
'item_0'

bearbeiten:

Tatsächlich können Sie das Dataset einfach wie jedes alte Array indizieren.

import pandas as pd

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

>>> print(first_value)
'item_0'
Lewis
quelle