1. ホーム
  2. python

[解決済み] Pandas DataFrameの行と列のヘッダを変換します。

2022-05-11 16:27:23

質問

私の扱うデータは少し乱雑です。データの中にヘッダー名が入っています。既存のpandas dataframeから行を選び、それを列のヘッダーにする(名前を変える)にはどうしたらよいでしょうか?

というようなことをしたいのですが。

header = df[df['old_header_name1'] == 'new_header_name1']

df.columns = header

解決方法は?

In [21]: df = pd.DataFrame([(1,2,3), ('foo','bar','baz'), (4,5,6)])

In [22]: df
Out[22]: 
     0    1    2
0    1    2    3
1  foo  bar  baz
2    4    5    6

列のラベルが2行目(インデックス位置1)の値と等しくなるように設定する。

In [23]: df.columns = df.iloc[1]

インデックスに一意なラベルがある場合は、2行目のラベルを削除します。

In [24]: df.drop(df.index[1])
Out[24]: 
1 foo bar baz
0   1   2   3
2   4   5   6

インデックスが一意でない場合、使用することができます。

In [133]: df.iloc[pd.RangeIndex(len(df)).drop(1)]
Out[133]: 
1 foo bar baz
0   1   2   3
2   4   5   6

使用方法 df.drop(df.index[1]) が削除されます。 すべて の行は、2番目の行と同じラベルを持つことになります。一意でないインデックスはこのようなつまずき(または潜在的なバグ)を引き起こす可能性があるため、(Pandasがそれを要求しないとしても)インデックスが一意であるように注意した方が良い場合があります。