Imputieren Sie kategoriale fehlende Werte in scikit-learn
Ich habe pandas-Daten mit mehreren Spalten des Typs text. Es gibt einige NaN-Werte zusammen mit diesen text-Spalten. Was ich versuche zu tun, ist zu unterstellen, diejenigen, die NaN ' s von sklearn.preprocessing.Imputer
(ersetzt NaN durch den häufigsten Wert). Das problem ist in der Umsetzung.
Angenommen, es ist ein Pandas dataframe df mit 30 Spalten, von denen 10 sind kategorialer Natur.
Sobald ich laufen:
from sklearn.preprocessing import Imputer
imp = Imputer(missing_values='NaN', strategy='most_frequent', axis=0)
imp.fit(df)
Python erzeugt eine error: 'could not convert string to float: 'run1''
wo "run1" ist eine gewöhnliche (nicht fehlenden) Wert aus der ersten Spalte mit kategorischen Daten.
Jede Hilfe wäre sehr willkommen
InformationsquelleAutor der Frage night_bat | 2014-08-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden der Mittelwerte für numerische Spalten und der häufigste Wert für nicht-numerische Spalten Sie könnte so etwas tun. Man könnte weiter unterscheiden zwischen Ganzzahlen und Fließkommazahlen. Ich denke, es könnte Sinn machen, verwenden Sie den median für integer-Spalten.
dem Drucke,
InformationsquelleAutor der Antwort sveitser
Können Sie
sklearn_pandas.CategoricalImputer
für die kategorischen Spalten. Details:Ersten, (aus dem Buch " Hands-On Machine Learning mit Scikit-Learn und TensorFlow) können Sie subpipelines für numerische und string - /kategoriale Funktionen, wobei jede subpipeline ersten Transformator ist ein Selektor, die eine Liste von Spaltennamen (und die
full_pipeline.fit_transform()
nimmt ein pandas DataFrame):Können Sie dann kombinieren Sie diese sub-pipelines mit
sklearn.pipeline.FeatureUnion
zum Beispiel:Nun, in der
num_pipeline
können Sie einfachsklearn.preprocessing.Imputer()
aber in dercat_pipline
verwenden, können SieCategoricalImputer()
von dersklearn_pandas
Paket.Hinweis:
sklearn-pandas
- Paket kann installiert werden, mitpip install sklearn-pandas
aber es ist importiertimport sklearn_pandas
InformationsquelleAutor der Antwort Austin
Inspiriert durch die Antworten hier und für die wollen der eine goto-Imputer für alle Einsatz-Fälle landete ich dies Schreibe. Es unterstützt vier Strategien für die Zuschreibung
mean, mode, median, fill
funktioniert auf beidenpd.DataFrame
undPd.Series
.mean
undmedian
funktioniert nur bei numerischen Datenmode
undfill
funktioniert sowohl für numerische und kategorische Daten.Nutzung
InformationsquelleAutor der Antwort Gautham Kumaran
Dieser code füllt in eine Reihe mit den häufigsten Kategorie:
Ausgänge:
InformationsquelleAutor der Antwort scottlittle
Kopieren und ändern sveitser Antwort, ich habe eine imputer für pandas.Serie Objekt
Verwenden Sie es tun würden:
InformationsquelleAutor der Antwort user1367204
Ähnlich. Ändern
Imputer
fürstrategy='most_frequent'
:wo
pandas.DataFrame.mode()
findet der häufigste Wert für jede Spalte und dannpandas.DataFrame.fillna()
füllt fehlende Werte mit diesen. Anderestrategy
Werte sind immer noch auf die gleiche Weise behandelt, indemImputer
.InformationsquelleAutor der Antwort Jack