回答:
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はインデックスを必要としません)。
"foo"
。この問題を回避する1つの方法は、そのような最初の行を明示的に選択することですdf.columns = df.iloc[np.where(df[0] == 'foo')[0][0]]
。
を表すパラメータを介して、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
pears, apples, lemons, plums, other
40, 50, 61, 72, 85
'''
df = pd.read_csv(StringIO(csv), header=2)
print(df)
Out[1]
pears apples lemons plums other
0 40 50 61 72 85