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_frame
kan worden gebruikt om een Series
naar DataFrame
te 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]