私はPandasシリーズの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]
そして、次の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]
私はそれを行う方法を見つけましたが、それがより効率的な方法だとは思いません。
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)
2つの一時dfを作成するのではなく、DataFrameコンストラクターを使用して、これらをdict内のパラメーターとして渡すことができます。
pd.DataFrame({'email':sf.index, 'list':sf.values})
Dfを作成する方法はたくさんあります。 docs をご覧ください。
to_frame():
次のシリーズ、dfから始めます。
email
[email protected] A
[email protected] B
[email protected] C
dtype: int64
to_frameを使用して、シリーズを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
必要なのは、列名を変更し、インデックス列に名前を付けることだけです。
df = df.rename(columns= {0: 'list'})
df.index.name = 'index'
DataFrameをさらに分析する準備ができました。
更新:私はちょうど遭遇しました このリンク ここで答えは私のものと驚くほど似ています.
1行の答えは
myseries.to_frame(name='my_column_name')
myseries.reset_index(drop=True, inplace=True) # As needed
Series.reset_index
name
引数付き多くの場合、シリーズをDataFrameに昇格させる必要があるユースケースが発生します。しかし、シリーズに名前がない場合、reset_index
は次のような結果になります。
s = pd.Series([1, 2, 3], index=['a', 'b', 'c']).rename_axis('A')
s
A
a 1
b 2
c 3
dtype: int64
s.reset_index()
A 0
0 a 1
1 b 2
2 c 3
カラム名は「0」です。 name
パラメーターを指定することでこれを修正できます。
s.reset_index(name='B')
A B
0 a 1
1 b 2
2 c 3
s.reset_index(name='list')
A list
0 a 1
1 b 2
2 c 3
Series.to_frame
インデックスを列に昇格させずにDataFrameを作成する場合は、 この回答 で提案されているように、Series.to_frame
を使用します。このalsoもnameパラメーターをサポートしています。
s.to_frame(name='B')
B
A
a 1
b 2
c 3
pd.DataFrame
コンストラクターcolumns
paramを指定して、Series.to_frame
と同じことを行うこともできます。
pd.DataFrame(s, columns=['B'])
B
A
a 1
b 2
c 3
series_obj.to_frame()?
しないでください。