使用しなければならないデータは少し複雑です。データ内にヘッダー名があります。既存のpandasデータフレームから行を選択し、列ヘッダーにする(名前を変更する)にはどうすればよいですか?
私は次のようなことをしたいです:
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.reindex(df.index.drop(1))
Out[24]:
1 foo bar baz
0 1 2 3
2 4 5 6
これは動作します(pandas v'0.19.2 '):
df.rename(columns=df.iloc[0])
データフレームを再作成する方が簡単です。これにより、列のタイプも最初から解釈されます。
headers = df.iloc[0]
new_df = pd.DataFrame(df.values[1:], columns=headers)
read_csv または read_html コンストラクターで行インデックスを指定することができます header
を表すパラメーター- Row number(s) to use as the column names, and the start of the data
。これには、ジャンクであると思われる先行するすべての行が自動的に削除されるという利点があります。
import pandas as pd
from io import StringIO
In[1]
csv = '''junk1, junk2, junk3, junk4, junk5
junk1, junk2, junk3, junk4, junk5
35, 40, 25, 19, 33
40, 50, 61, 72, 85
'''
df = pd.read_csv(StringIO(csv), header=2)
print(df)
Out[1]
35 40 25 19 33
0 40 50 61 72 85