Ich habe einen Pandas Datenrahmen, der einige Zeilen und Spalten hat. Jede Spalte hat eine Kopfzeile. Solange ich weiterhin Datenmanipulationsoperationen in Pandas mache, bleiben meine variablen Header erhalten. Aber wenn ich eine Datenvorverarbeitungsfunktion von Sci-kit-learn lib ausprobiere, verliere ich letztendlich alle meine Header und der Frame wird in eine Matrix von Zahlen umgewandelt.So behalten Sie die Spaltenüberschriften des Datenrahmens nach der Vorverarbeitung in scikit-learn
Ich verstehe, warum es passiert, weil scikit-learn ein numpy ndarray als Ausgabe gibt. Und numpy ndarray, das nur Matrix ist, würde Spaltennamen nicht haben.
Aber hier ist die Sache. Wenn ich ein Modell für mein Dataset erstelle, selbst nach der ersten Datenvorverarbeitung und dem Versuch, ein Modell zu erstellen, muss ich möglicherweise einige Datenmanipulationsaufgaben ausführen, um ein anderes Modell für eine bessere Anpassung auszuführen. Ohne auf den Spaltenkopf zugreifen zu können, macht es schwierig, Daten zu manipulieren, da ich vielleicht nicht weiß, was der Index einer bestimmten Variablen ist, aber es ist leichter, sich den Variablennamen zu merken oder sogar nach df.columns zu suchen.
Wie man das überwinden?
EDIT1: Bearbeiten mit Beispieldaten-Snapshot.
Pclass Sex Age SibSp Parch Fare Embarked
0 3 0 22 1 0 7.2500 1
1 1 1 38 1 0 71.2833 2
2 3 1 26 0 0 7.9250 1
3 1 1 35 1 0 53.1000 1
4 3 0 35 0 0 8.0500 1
5 3 0 NaN 0 0 8.4583 3
6 1 0 54 0 0 51.8625 1
7 3 0 2 3 1 21.0750 1
8 3 1 27 0 2 11.1333 1
9 2 1 14 1 0 30.0708 2
10 3 1 4 1 1 16.7000 1
11 1 1 58 0 0 26.5500 1
12 3 0 20 0 0 8.0500 1
13 3 0 39 1 5 31.2750 1
14 3 1 14 0 0 7.8542 1
15 2 1 55 0 0 16.0000 1
Das oben genannte ist im Grunde der Pandas-Datenrahmen. Wenn ich dies jetzt auf diesem Datenrahmen mache, werden die Spaltenüberschriften entfernt.
Neue Daten sind von numpy Array und daher sind die Spaltennamen entfernt.
array([[ 3. , 0. , 22. , ..., 0. ,
7.25 , 1. ],
[ 1. , 1. , 38. , ..., 0. ,
71.2833 , 2. ],
[ 3. , 1. , 26. , ..., 0. ,
7.925 , 1. ],
...,
[ 3. , 1. , 29.69911765, ..., 2. ,
23.45 , 1. ],
[ 1. , 0. , 26. , ..., 0. ,
30. , 2. ],
[ 3. , 0. , 32. , ..., 0. ,
7.75 , 3. ]])
Deshalb möchte ich die Spaltennamen behalten, wenn ich auf meinem Pandas Datenrahmen eine Datenmanipulation zu tun.
Eine Probe des Pandas Code könnte nützlicher sein. Bietet Pandas nicht die Möglichkeit, die Daten aus einem Frame zu extrahieren und sie dann durch eine neue Kopie zu ersetzen? – hpaulj
@Manish: Bitte geben Sie ein sehr einfaches, reproduzierbares Beispiel an! Ein dreizeiliger Datenrahmen würde Ihre Frage verständlicher machen. (Vielleicht würde ich einfach 'saved_cols = df.columns' kopieren und dann dem modifizierten' df' zuweisen, aber das ist es, was Sie brauchen) – cd98
Tatsächlich, wie @ cd98 sagt, kopiert 'saved_cols = df .columns' und dann, wenn Sie die Serie bekommen haben, indem Sie 'pandas.DataFrame (series, saved_cols)' machen, bekommen Sie Ihren Dataframe zurück. Ich mache es zum Beispiel, wenn ich 'train_test_split' verwende, was ein' numpy ndarray' zurückgibt, aber ich muss es als Datenframe verwenden. Darauf kann man nicht besonders stolz sein, aber meiner Meinung nach ist es gut genug. – lrnzcig