Panda-serie converteren naar DataFrame

Ik heb een Pandas-serie sf:

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]

En ik zou het willen transformeren naar het volgende 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]

Ik heb een manier gevonden om het te doen, maar ik betwijfel of dit de meest efficiënte is:

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)

Antwoord 1, autoriteit 100%

In plaats van 2 tijdelijke df’s te maken, kunt u deze gewoon als parameters binnen een dict doorgeven met behulp van de DataFrame-constructor:

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

Er zijn veel manieren om een df te maken, zie de docs


Antwoord 2, autoriteit 45%

to_frame():

Vanaf de volgende serie, df:

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

Ik gebruik to_frameom de serie naar DataFrame te converteren:

df = df.to_frame().reset_index()
    email               0
0   [email protected]    A
1   [email protected]    B
2   [email protected]    C
3   [email protected]    D

Nu hoeft u alleen nog de naam van de kolom te wijzigen en de indexkolom een naam te geven:

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

Uw DataFrame is klaar voor verdere analyse.

Update: ik kwam zojuist deze linktegen waar de antwoorden lijken hier verrassend veel op de mijne.


Antwoord 3, autoriteit 14%

Een regel antwoord zou zijn

myseries.to_frame(name='my_column_name')

Of

myseries.reset_index(drop=True, inplace=True)  # As needed

4, Autoriteit 3%

Series.to_framekan worden gebruikt om een ​​Seriesnaar DataFramete converteren.

# The provided name (columnName) will substitute the series name
df = series.to_frame('columnName')

Bijvoorbeeld,

s = pd.Series(["a", "b", "c"], name="vals")
df = s.to_frame('newCol')
print(df)
   newCol
0    a
1    b
2    c

5, Autoriteit 3%

Super eenvoudige manier is ook

df = pd.DataFrame(series)

Het retourneert een DF van 1 kolom (seriewaarden) + 1-index (0 …. n)


6

Waarschijnlijk beoordeeld als een niet-pythonische manier om dit te doen, maar dit geeft het resultaat dat u wilt in een regel:

new_df = pd.DataFrame(zip(email,list))

Resultaat:

              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, 3.0]
4   [email protected]    [1.0, 5.0, 0.0]

Other episodes