Ersetzen Sie df-Indexwerte mit Werten aus einer Liste, aber ignorieren Sie leere Zeichenfolgen

Ich möchte DF1.index.values ​​mit DF2 ersetzen [some_column] .values ​​HOWEVER Ich möchte nur ersetzen, wenn DF2 [some_column] .value keine null oder leere Zeichenfolge ist.

DF1.index.values Index(['a','b','c','d']), dtype='object') DF2[some_column].values ['base','','','net 1'] 

Erwartete Ausgabe

 Index(['base','b','c','net 1']), dtype='object') 

Mein Versuch:

 DF1.index = DF2[some_column].values 

Es ist falsch, weil es alles ersetzt und das ist nicht das, was ich will, ich interessiere mich nur für null oder leere Werte.

  • Verschiedene Namen von Namen mit Pandas
  • So bearbeiten Sie mehrere Elemente in df.columns
  • Wie kann man überprüfen, ob der Inhalt der Spalte A in Spalte B mit Python DataFrame enthalten ist?
  • Konstruieren Sie bipartite Graphen aus Spalten von Python-Dataframe
  • So drucken Sie Dataframe ohne Index aus
  • Python: verschiebungsspalte in pandas dataframe um eins
  • One Solution collect form web for “Ersetzen Sie df-Indexwerte mit Werten aus einer Liste, aber ignorieren Sie leere Zeichenfolgen”

    Sie können verwenden, where Sie Werte nach der Bedingung von Quellen auswählen können:

     DF1.index = DF2[some_column].where(DF2[some_column]!="", DF2.index) 

    So wird es DF2[some_column] Werte verwenden, wenn DF2[some_column]!="" (In der Tat hier erstellen wir eine Serie, die als boolescher Index verwendet wird, welche Daten für jeden DF2[some_column]!="" zu wählen sind), im anderen Fall wird es DF2.index Wert.

    Da du auch keine nan Werte willst, brauchst du pd.notnull Funktionen. Und um beide Bedingungen zu überprüfen, verwenden Sie "logische und" Funktion für Wertepaare in zwei Serien, die & .

    Also der letzte Code ist

     DF1.index = DF2[some_column].where( (DF2[some_column]!="") & pd.notnull(DF2[some_column]), DF2.index) 
    Python ist die beste Programmiersprache der Welt.