Konvertieren pandas Serie DataFrame
Ich habe einen Pandabären sf-Serie:
email
email1@email.com [1.0, 0.0, 0.0]
email2@email.com [2.0, 0.0, 0.0]
email3@email.com [1.0, 0.0, 0.0]
email4@email.com [4.0, 0.0, 0.0]
email5@email.com [1.0, 0.0, 3.0]
email6@email.com [1.0, 5.0, 0.0]
Und ich möchte, um es zu transformieren, um die folgenden DataFrame:
index | email | list
_____________________________________________
0 | email1@email.com | [1.0, 0.0, 0.0]
1 | email2@email.com | [2.0, 0.0, 0.0]
2 | email3@email.com | [1.0, 0.0, 0.0]
3 | email4@email.com | [4.0, 0.0, 0.0]
4 | email5@email.com | [1.0, 0.0, 3.0]
5 | email6@email.com | [1.0, 5.0, 0.0]
Fand ich einen Weg, es zu tun, aber ich bezweifle, dass es je effizienter ein:
df1 = pd.DataFrame(data=sf.index, columns=['email'])
df2 = pd.DataFrame(data=sf.values, columns=['list'])
df = pd.merge(df1, df2, left_index=True, right_index=True)
- In neueren Versionen von pandas, dies kann erreicht werden mit einer einzigen
reset_index
aufrufen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eher als erstellen 2 temporäre dfs können Sie einfach übergeben Sie diese als Parameter in ein dict mit dem DataFrame-Konstruktor:
Gibt es viele Möglichkeiten, zu bauen, df, siehe die docs
pd.concat([sf.index, sf.values], axis=1)
to_frame():
Beginnend mit der folgenden Serie, df:
Benutze ich to_frame zu konvertieren, die Serie zu DataFrame:
Alles was Sie jetzt brauchen, ist, benennen Sie die Spalte name und den Namen der index-Spalte:
Ihre DataFrame ist bereit für die weitere Analyse.
Update: ich kam gerade über dieser link, wo die Antworten sind überraschend ähnlich wie mir hier.
series_obj.to_frame()
funktioniert! Ich Ausgabe dieses Klasse Typ<class 'pandas.core.frame.DataFrame'>
to_frame().reset_index()
anstatt nurreset_index
? Man könnte auch einfach tunreset_index(name='list')
Einer Zeile Antwort wäre
Series.reset_index
mitname
argumentOft der use-case kommt, wo eine Serie muss gefördert werden, um ein DataFrame. Aber wenn die Serie keinen Namen hat, dann
reset_index
wird im Ergebnis so etwas wie,Wo sehen Sie die Spalte name ist "0". Wir können dieses Problem beheben, werden die Angabe einer
name
parameter.Series.to_frame
Wenn Sie möchten, erstellen Sie ein DataFrame ohne die Förderung der index auf eine Spalte, verwenden
Series.to_frame
, wie vorgeschlagen, in diese Antwort. Diese auch unterstützt ein name-parameter.pd.DataFrame
KonstruktorKönnen Sie auch das gleiche tun wie
Series.to_frame
durch die Angabe einercolumns
param:to_frame
stattreset_index
, aber gibt es überhaupt einen guten Grund, beide zu verwenden? hierWarum nicht
series_obj.to_frame()?
Es wird meine Arbeit getan.