2014-09-29 16 views
23

mam serię pandy SF:python, najlepszym sposobem konwersji serię pandy w dataframe pandy

email 
[email protected] [1.0, 0.0, 0.0] 
[email protected] [2.0, 0.0, 0.0] 
[email protected] [1.0, 0.0, 0.0] 
[email protected] [4.0, 0.0, 0.0] 
[email protected] [1.0, 0.0, 3.0] 
[email protected] [1.0, 5.0, 0.0] 

I chciałbym, aby przekształcić go w następujący DataFrame:

index | email    | list 
_____________________________________________ 
0  | [email protected] | [1.0, 0.0, 0.0] 
1  | [email protected] | [2.0, 0.0, 0.0] 
2  | [email protected] | [1.0, 0.0, 0.0] 
3  | [email protected] | [4.0, 0.0, 0.0] 
4  | [email protected] | [1.0, 0.0, 3.0] 
5  | [email protected] | [1.0, 5.0, 0.0] 

I znalazłem sposób, aby to zrobić, ale wątpię, że jest to bardziej wydajny:

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) 
+1

Co powiesz na 'pd.DataFrame ({'email': sf.index, 'list': sf.values})'? – EdChum

+0

to działa, dzięki @EdChum – woshitom

+0

Czy mam opublikować jako odpowiedź? – EdChum

Odpowiedz

48

Zamiast tworzyć 2 tymczasowe pliki df można po prostu przekazać takie jak params wewnątrz dict pomocą konstruktora DataFrame:

pd.DataFrame({'email':sf.index, 'list':sf.values}) 

Istnieje wiele sposobów, aby skonstruować df, zobacz docs

+0

Kolejną świetną opcją jest konkatować, jeśli twoja seria ma te same osie 'pd.concat ([sf.index, sf.values], axis = 1)' – Lauren

20

to_frame():

Począwszy od następnego Series DF:

email 
[email protected] A 
[email protected] B 
[email protected] C 
dtype: int64 

używam to_frame do konwertować serię do DataFrame:

df = df.to_frame().reset_index() 

    email    0 
0 [email protected] A 
1 [email protected] B 
2 [email protected] C 
3 [email protected] D 

Teraz wszystko, co potrzebne jest, aby zmienić nazwę kolumny i nazwa kolumny indeksu:

df = df.rename(columns= {0: 'list'}) 
df.index.name = 'index' 

Twój DataFrame jest gotowy do dalszej analizy.

Aktualizacja: Właśnie natknąłem się na this link, gdzie odpowiedzi są zaskakująco podobne do moich tutaj.

+1

'series_obj.to_frame()' działa! Wyprowadzam ten typ klasy '' –