Pandas Fillna mehrere Spalten
Dieser Artikel erklärt, wie Sie die Funktion fillna()
verwenden, um die NaN
-Werte durch numerische zu ersetzen. Wir werden auch lernen, wie man die NaN
-Werte aus dem Pandas-Datenrahmen durch Strings ersetzt.
Ersetzen Sie mehrere Spalten mit NaN-Werten durch einen beliebigen Datentyp mit fillna()
in Pandas
Die Pandas-Funktion fillna()
kann die NaN
-Werte durch einen bestimmten Wert ersetzen. Die Funktion kann diesen Wert innerhalb einer Spalte oder Zeile propagieren oder NaN
-Werte je nach Spalte durch andere Werte ersetzen.
Wir erstellen ein neues Skript mit der als pd
importierten Pandas-Bibliothek, gefolgt von der als np
importierten NumPy-Bibliothek. Als nächstes erstellen wir einen neuen Datenrahmen namens City_Temp
und setzen diesen gleich dem Pandas-Datenrahmen.
Nehmen wir an, wir verfolgen die Temperaturen für 2 Städte, Tulsa und Dallas, für eine Woche, aber die Daten sind unvollständig. Wir erstellen zwei Datenreihen mit Temperaturwerten für jede Stadt für 5 Tage.
Die erste Zeile enthält den Schlüssel von Tulsa
mit einigen numerischen Werten und np.nan
innerhalb einer Liste, und die zweite Zeile mit dem Schlüssel von Dallas
enthält auch einige numerische Werte und np.nan
. Der Wert np.nan
erzeugt einen Nullwert im Datenrahmen.
Als nächstes fügen wir das Argument index
mit einer Liste mit den abgekürzten Namen von Montag bis Freitag hinzu. Wenn das Ergebnis auf der Konsole ausgegeben wird, sehen wir einen Datenrahmen mit Temperaturwerten für zwei Städte über 5 verschiedene Tage.
import numpy as np
import pandas as pd
City_Temp = pd.DataFrame(
{
"Tulsa": [78.5, 80.0, 75.1, np.nan, np.nan],
"Dallas": [83.2, 93.1, np.nan, np.nan, 92.1],
},
index=["Mon", "Tue", "Wed", "Thu", "Fri"],
)
print(City_Temp)
Ausgang:
Tulsa Dallas
Mon 78.5 83.2
Tue 80.0 93.1
Wed 75.1 NaN
Thu NaN NaN
Fri NaN 92.1
Um die leeren Werte innerhalb des City_Temp
-Datenrahmens zu füllen, können wir die fillna()
-Funktion von Pandas innerhalb einer print
-Anweisung verwenden. In der Funktion fillna()
fügen wir einen einzelnen Wert von 80.0 hinzu, und wenn das Ergebnis auf der Konsole ausgegeben wird, sehen wir, dass alle NaN
-Werte aus dem Datenrahmen durch die Zahl 80.0 ersetzt wurden.
print(City_Temp.fillna(80.0))
Ausgang:
Tulsa Dallas
Mon 78.5 83.2
Tue 80.0 93.1
Wed 75.1 80.0
Thu 80.0 80.0
Fri 80.0 92.1
Als Alternative zur Angabe eines bestimmten Werts können wir das Argument method
mit dem Wert ffill
verwenden, um die Funktion anzuweisen, die NaN
-Werte mit dem Wert darüber in derselben Spalte zu füllen. Dabei werden die NaN
-Werte für Tulsa
durch 75.1 und die Werte für Dallas
durch 93.1 ersetzt.
print(City_Temp.fillna(method="ffill"))
Ausgang:
Tulsa Dallas
Mon 78.5 83.2
Tue 80.0 93.1
Wed 75.1 93.1
Thu 75.1 93.1
Fri 75.1 92.1
Auf ähnliche Weise können wir ein Backfill durchführen, wenn der Wert des Arguments method
auf bfill
gesetzt ist. Das Ergebnis zeigt, dass die NaN
-Werte in der Spalte Dallas
mit dem Wert 92.1 gefüllt sind, aber die Werte in der Spalte Tulsa
nicht ersetzt werden.
Dies liegt daran, dass unterhalb der Zeile Friday
kein gültiger Wert vorhanden ist, der zum Ersetzen der NaN
-Werte verwendet werden kann.
print(City_Temp.fillna(method="bfill"))
Ausgang:
Tulsa Dallas
Mon 78.5 83.2
Tue 80.0 93.1
Wed 75.1 92.1
Thu NaN 92.1
Fri NaN 92.1
Wenn wir das erste NaN
-Elementvorkommen im Datenrahmen für jede Stadt füllen möchten, können wir den ffil
-Wert für den method
-Typ verwenden und das limit
-Argument mit einem Wert von 1 hinzufügen. Das Ergebnis zeigt dies nur das erste Vorkommen des NaN
-Wertes wird durch eine Vorwärtsfüllung ersetzt.
print(City_Temp.fillna(method="ffill", limit=1))
Ausgang:
Tulsa Dallas
Mon 78.5 83.2
Tue 80.0 93.1
Wed 75.1 93.1
Thu 75.1 NaN
Fri NaN 92.1
Füllen Sie die NaN
-Elemente mit dem Durchschnitt
Schliesslich können wir in verschiedenen Spalten unterschiedliche Werte für die NaN
-Elemente angeben.
Nehmen wir an, wir wollen die NaN
-Elemente mit dem durchschnittlichen Temperaturwert für diese Stadt füllen. Dazu erstellen wir ein Wörterbuch mit geschweiften Klammern innerhalb der Funktion fillna()
.
Im Wörterbuch fügen wir den Schlüssel Tulsa
mit dem auf 2 Dezimalstellen gerundeten durchschnittlichen Temperaturwert hinzu, indem wir die Funktion np.round()
mit der darin enthaltenen Funktion np.mean()
verwenden.
Innerhalb der Funktion mean()
fügen wir den Datenrahmen City_Temp
als erstes Argument hinzu und geben die Spalte Tulsa
in eckigen Klammern an, gefolgt von der Ganzzahl 2, um das Ergebnis auf 2 Dezimalstellen zu runden. Dies wird für das Schlüssel-Wert-Paar Dallas
wiederholt.
Wir können den Datenrahmen neu zuweisen, sodass er dauerhaft geändert wird.
City_Temp = City_Temp.fillna(
{
"Tulsa": np.round(np.mean(City_Temp["Tulsa"]), 2),
"Dallas": np.round(np.mean(City_Temp["Dallas"]), 2),
}
)
print(City_Temp)
Wenn das Ergebnis auf der Konsole ausgegeben wird, sehen wir, dass der Durchschnittswert für Tulsa, 77,87, die NaN
-Elemente für Donnerstag und Freitag ersetzt hat, und der Durchschnittswert für Dallas, 89,47, die NaN
-Elemente für Mittwoch ersetzt hat und Donnerstag.
Tulsa Dallas
Mon 78.50 83.20
Tue 80.00 93.10
Wed 75.10 89.47
Thu 77.87 89.47
Fri 77.87 92.10
Ersetzen Sie die NaN
-Werte durch einen String
In Ihrem Fall könnte der Datentyp beliebig sein, aber in diesem Fall können Sie auch den NaN
-Wert oder den Nullwert mit dem folgenden Code ersetzen.
City_Temp = pd.DataFrame(
{
"Tulsa": [78.5, 80.0, 75.1, np.nan, np.nan],
"Dallas": [83.2, 93.1, np.nan, np.nan, 92.1],
},
index=["Mon", "Tue", "Wed", "Thu", "Fri"],
)
print(City_Temp)
Ausgang:
Tulsa Dallas
Mon 78.5 83.2
Tue 80.0 93.1
Wed 75.1 NaN
Thu NaN NaN
Fri NaN 92.1
Betrachten Sie den folgenden Code, um die NaN
-Werte durch eine Zeichenfolge zu ersetzen.
df = City_Temp.fillna({"Tulsa": ".", "Dallas": "."}).fillna(0)
print(df)
Ausgang:
Tulsa Dallas
Mon 78.5 83.2
Tue 80.0 93.1
Wed 75.1 .
Thu . .
Fri . 92.1
Wir können auch das folgende Code-Snippet verwenden, um die NaN
-Werte durch eine Zeichenfolge zu ersetzen, was genauso funktioniert wie der oben erwähnte Code.
print(City_Temp.fillna("."))
Ausgang:
Tulsa Dallas
Mon 78.5 83.2
Tue 80.0 93.1
Wed 75.1 .
Thu . .
Fri . 92.1
Vollständiger Code:
# In[1]:
import numpy as np
import pandas as pd
City_Temp = pd.DataFrame(
{
"Tulsa": [78.5, 80.0, 75.1, np.nan, np.nan],
"Dallas": [83.2, 93.1, np.nan, np.nan, 92.1],
},
index=["Mon", "Tue", "Wed", "Thu", "Fri"],
)
print(City_Temp)
# In[2]:
print(City_Temp.fillna(80.0))
# In[3]:
print(City_Temp.fillna(method="ffill"))
# In[4]:
print(City_Temp.fillna(method="bfill"))
# In[5]:
print(City_Temp.fillna(method="ffill", limit=1))
# In[6]:
City_Temp = City_Temp.fillna(
{
"Tulsa": np.round(np.mean(City_Temp["Tulsa"]), 2),
"Dallas": np.round(np.mean(City_Temp["Dallas"]), 2),
}
)
print(City_Temp)
# ##### Replace nan with string
# In[7]:
City_Temp = pd.DataFrame(
{
"Tulsa": [78.5, 80.0, 75.1, np.nan, np.nan],
"Dallas": [83.2, 93.1, np.nan, np.nan, 92.1],
},
index=["Mon", "Tue", "Wed", "Thu", "Fri"],
)
print(City_Temp)
# In[8]:
df = City_Temp.fillna({"Tulsa": ".", "Dallas": "."}).fillna(0)
print(df)
# In[9]:
print(City_Temp.fillna("."))
Weitere Lösungen finden Sie hier.
Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.
LinkedIn