web-dev-qa-db-ja.com

pandasシリーズに列名を割り当てる

pandasシリーズ

object x
Ezh2   2
Hmgb   7
Irf1   1

これをそれぞれGeneとCountという列名を持つデータフレームとして保存したい

x_df = pd.DataFrame(x,columns = ['Gene','count'])

しかし、それは機能しません。私が望む最終的なフォームは

Gene Count
Ezh2   2
Hmgb   7
Irf1   1

これを行う方法を提案できますか

20
Ssank

Dictを作成し、これをデータパラメーターとしてデータフレームコンストラクターに渡すことができます。

In [235]:

df = pd.DataFrame({'Gene':s.index, 'count':s.values})
df
Out[235]:
   Gene  count
0  Ezh2      2
1  Hmgb      7
2  Irf1      1

あるいは、シリーズからdfを作成することもできます。インデックスが使用されるときにreset_indexを呼び出してから、列の名前を変更する必要があります。

In [237]:

df = pd.DataFrame(s).reset_index()
df.columns = ['Gene', 'count']
df
Out[237]:
   Gene  count
0  Ezh2      2
1  Hmgb      7
2  Irf1      1
27
EdChum

.to_frame()メソッドを使用することもできます。

シリーズの場合、「Gene」はすでにインデックスであり、DataFrameに変換した後もインデックスのままであると想定しています。 .to_frame()name引数は、列に名前を付けます。

x = x.to_frame('count')

両方を列として使用する場合は、インデックスをリセットできます。

x = x.to_frame('count').reset_index()
21
Sealander

「Gene」という名前のインデックスを持つpd.Seriesオブジェクトxがある場合、reset_indexを使用してname引数を指定できます。

df = x.reset_index(name='count')

デモは次のとおりです。

x = pd.Series([2, 7, 1], index=['Ezh2', 'Hmgb', 'Irf1'])
x.index.name = 'Gene'

df = x.reset_index(name='count')

print(df)

   Gene  count
0  Ezh2      2
1  Hmgb      7
2  Irf1      1
1
jpp