Überprüfen Sie, ob ein Wert im Pandas-Datenrahmenindex vorhanden ist

Lesezeit: 5 Minuten

Abhis Benutzeravatar
Abhi

Ich bin sicher, dass es einen offensichtlichen Weg gibt, dies zu tun, aber mir fällt im Moment nichts Schlaueres ein.

Grundsätzlich würde ich gerne eine Ausnahme bekommen, anstatt eine Ausnahme zu machen True oder False um zu sehen, ob ein Wert in Pandas existiert df Index.

import pandas as pd
df = pd.DataFrame({'test':[1,2,3,4]}, index=['a','b','c','d'])
df.loc['g']  # (should give False)

Was ich jetzt am arbeiten habe ist folgendes

sum(df.index == 'g')

  • Was ist mit any(df.index == ‘g’) ?

    – Luffe

    8. Mai 2014 um 18:13 Uhr

Dies sollte den Zweck erfüllen

'g' in df.index

  • Dies scheint nicht zu funktionieren, wenn mehrere Einträge dieselben Indexwerte haben.

    – MaximG

    16. Oktober 2014 um 17:59 Uhr

  • @MaximG Was meinst du? Dies funktioniert auch für einen nicht eindeutigen Index.

    – joris

    30. Juli 2015 um 15:40 Uhr

  • Funktioniert auch für Multi-Index. Wenn Ihr Index eine Länge hat ndann ein Tupel beliebiger Länge von 1..n kann überprüft werden

    – Minh Triet

    5. März 2018 um 10:26 Uhr

  • Für andere, die hierher kommen, müssen Sie möglicherweise verwenden 'g' in df.columns wenn Ihr Datenrahmen mit Spaltenüberschriften und nicht mit einem Index definiert wurde, z. df = pandas.DataFrame({'test':[1,2,3,4]}, columns=['a','b','c','d'])

    – Talor

    22. Juni 2018 um 14:54 Uhr


  • Ist das zeitkonstant oder linear?

    – Lokesch

    23. November 2018 um 11:00 Uhr

Benutzeravatar von broccoli2000
Brokkoli2000

Multi-Index funktioniert etwas anders als Single-Index. Hier sind einige Methoden für mehrfach indizierte Datenrahmen.

df = pd.DataFrame({'col1': ['a', 'b','c', 'd'], 'col2': ['X','X','Y', 'Y'], 'col3': [1, 2, 3, 4]}, columns=['col1', 'col2', 'col3'])
df = df.set_index(['col1', 'col2'])

in df.index funktioniert nur für die erste Ebene, wenn ein einzelner Indexwert geprüft wird.

'a' in df.index     # True
'X' in df.index     # False

Prüfen df.index.levels für andere Ebenen.

'a' in df.index.levels[0] # True
'X' in df.index.levels[1] # True

Check-In df.index für ein Indexkombinationstupel.

('a', 'X') in df.index  # True
('a', 'Y') in df.index  # False

Benutzeravatar von Ezekiel Kruglick
Hesekiel Kruglick

Nur als Referenz, da ich danach gesucht habe, können Sie das Vorhandensein in den Werten oder im Index testen, indem Sie die Methode “.values” anhängen, z

g in df.<your selected field>.values
g in df.index.values

Ich finde, dass das Hinzufügen der “.values”, um eine einfache Liste oder ndarray out zu erhalten, Existenz- oder “in” -Prüfungen mit den anderen Python-Tools reibungsloser laufen lässt. Ich dachte nur, ich würde das für die Leute rauswerfen.

  • aber AttributeError: ‘DataFrame’-Objekt hat kein Attribut ‘field’

    – Ganke

    30. Juli 2015 um 14:13 Uhr

  • Hallo Ganke. Das “Feld” sollte zeigen, dass Sie die Methode “.values” auf verschiedene Felder des Datenrahmens wie Spalten oder eine ausgewählte Spalte anwenden können. “.index” ist ein Beispiel für das Ersetzen von “field” durch ein tatsächlich verfügbares Feld 🙂 Ich denke, das könnte klarer sein …

    – Hesekiel Kruglick

    30. Juli 2015 um 16:15 Uhr

  • Dies war wirklich hilfreich, um darauf hinzuweisen. Ich habe einen hierarchischen Fall, wo in g in df.index produziert wahr und in g in df.index.values FALSCH. Interessant.

    – Watsonic

    21. September 2015 um 20:34 Uhr

  • @watsonic – ein Warnpunkt ist, um zu sehen, ob einer von diesen aufgrund der Hierarchie Tupel zurückgibt. Achten Sie darauf, zu sehen, was beide ausgeben (z. B. in Ipython oder in der Befehlszeile), um sicherzustellen, dass Sie verstehen, womit Sie vergleichen. Eine andere Sache, die Sie mit hierarchischen Indizes machen können, ist df.index.get_level_values(), um die Dinge verständlicher zu machen – natürlich abhängig von Ihrer Anwendung.

    – Hesekiel Kruglick

    21. September 2015 um 20:40 Uhr

  • Dadurch wird die Suchzeit erheblich verlängert, da Sie, anstatt den für Pandas optimierten Suchindexer zu verwenden, eine Liste durchlaufen. Entschuldigung für die Formatierung, python data = [{'a': random.random(), 'b': random.randint(0, 10), 'c': i} for i in range(10000)] data2 = [{'a': random.random(), 'b': random.randint(0, 10), 'c': i} for i in range(100)] df1 = pd.DataFrame.from_records(data) df2 = pd.DataFrame.from_records(data2) timeit 99999 in df2.index # 442ns timeit 99999 in df1.index # 476ns timeit 99999 in df2.index.values # 3310ns timeit 99999 in df1.index.values # 63900ns

    – GS

    11. Oktober 2021 um 11:05 Uhr


Benutzeravatar von xxyjoel
xyjoel

Der folgende Code gibt keinen booleschen Wert aus, ermöglicht jedoch die Unterteilung von Datenrahmen nach Index … Ich verstehe, dass dies wahrscheinlich nicht der effizienteste Weg ist, um das Problem zu lösen, aber ich (1) mag die Art und Weise, wie dies gelesen wird, und (2) Sie können problemlos unterteilen wobei der df1-Index in df2 vorhanden ist:

df3 = df1[df1.index.isin(df2.index)]

oder wo der df1-Index in df2 nicht existiert …

df3 = df1[~df1.index.isin(df2.index)]

mit DataFrame: df_data

>>> df_data
  id   name  value
0  a  ampha      1
1  b   beta      2
2  c     ce      3

Ich habe es versucht:

>>> getattr(df_data, 'value').isin([1]).any()
True
>>> getattr(df_data, 'value').isin(['1']).any()
True

aber:

>>> 1 in getattr(df_data, 'value')
True
>>> '1' in getattr(df_data, 'value')
False

So viel Spaß 😀

  • isin wird nicht nach dem dtype suchen. df['value'].isin([True]).any() Probieren Sie dies aus, es wird Ihnen auch Wahr geben, weil es mit übereinstimmt 1. True -> 1.

    – Mohamed Thasin ah

    22. März 2019 um 8:23 Uhr

Benutzeravatar von Guillaume Jacquenot
Guillaume Jaquenot

df = pandas.DataFrame({'g':[1]}, index=['isStop'])

#df.loc['g']

if 'g' in df.index:
    print("find g")

if 'isStop' in df.index:
    print("find a") 

  • isin wird nicht nach dem dtype suchen. df['value'].isin([True]).any() Probieren Sie dies aus, es wird Ihnen auch Wahr geben, weil es mit übereinstimmt 1. True -> 1.

    – Mohamed Thasin ah

    22. März 2019 um 8:23 Uhr

Ich verwende gerne:

if 'value' in df.index.get_level_values(0):
    print(True)

get_level_values -Methode ist gut, da Sie damit den Wert in den Indizes abrufen können, unabhängig davon, ob Ihr Index einfach oder zusammengesetzt ist.

Verwenden Sie 0 (Null), wenn Sie einen einzelnen Index in Ihrem Datenrahmen haben [or you want to check the first index in multiple index levels]. Verwenden Sie 1 für den zweiten Index und so weiter …

1435890cookie-checkÜberprüfen Sie, ob ein Wert im Pandas-Datenrahmenindex vorhanden ist

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy