pandasの特定の列の名前を変更する
dataframeにdata
という名前をつけました。1列しかないヘッダーの名前を変更するにはどうしたらいいでしょうか?例えば、gdp
をlog(gdp)
に?
data =
y gdp cap
0 1 2 5
1 2 3 9
2 8 7 2
3 3 4 7
4 6 7 7
5 4 8 3
6 8 2 8
7 9 9 10
8 6 6 4
9 10 10 7
151
3
rename
](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.rename.html#pandas.DataFrame.rename)を見ると、
columns`のパラメータとしてdictを受け付けるので、1つのエントリを持つdictを渡すだけです。また、relatedも参照してください。
1つのカラムの名前を変更する必要がある場合には、
list-comprehension
を使用する方がはるかに高速な実装になります。複数のカラムの名前を変更する必要がある場合は、次のような条件式を使用します。
あるいは、
dictionary
を使ってマッピングを構築し、そのget
操作でlist-comprehension
を実行し、デフォルト値を古い名前に設定します。タイミング:。
v0.24+より、一度に1つ(または複数)のカラムの名前を変更するようになりました。
DataFrame.rename()
でaxis=1
またはaxis='columns'
(axis
引数はv0.21
で導入されました。Index.str.replace()
文字列/正規表現ベースの置換を行います。一度にすべての列の名前を変更する必要がある場合。
DataFrame.set_axis()
メソッドで、axis=1
を指定します。リストのような配列を渡します。インプレースでの変更にもオプションが用意されています。rename
にaxis=1
を指定します。0.21+ で
rename
でaxis
パラメータを指定できるようになりました。(ただし、
rename
はデフォルトではインプレースされないので、結果を 代入 する必要があります。)この追加は、他のAPIとの整合性を高めるために行われました。新しい
axis
引数はcolumns
パラメータと似ていて、同じことをします。rename` には、各カラムに対して一度だけ呼び出されるコールバックもあります。
この具体的なシナリオでは
Index.str.replace
pythonの文字列の
replace
メソッドと同様に、pandasのIndexとSeries(object dtypeのみ)では、文字列と正規表現ベースの置換のために、("vectorized")str.replace
メソッドを定義しています。他のメソッドと比較した場合の利点は、
str.replace
が正規表現をサポートしていることです (デフォルトで有効になっています)。詳細はドキュメントを参照してください。set_axis
にaxis=1
を指定してリストを渡す。ヘッダーのリストを指定して、
set_axis
を呼び出します。リストはカラム/インデックスのサイズと同じ長さでなければなりません。set_axisはデフォルトでは元の DataFrame を変更しますが、
inplace=False` を指定することで、変更されたコピーを返すことができます。注意: 今後のリリースでは、
inplace
のデフォルトはTrue
になります。メソッドの連鎖。 すでに
df.columns = ...
で列を割り当てる効率的な方法があるのに、なぜset_axis
を選ぶのでしょうか?Ted Petrou氏が[この回答]で示しているように、(https://stackoverflow.com/a/46912050/4909087)set_axis
はメソッドを連鎖させようとするときに便利です。比較
バーサス
前者の方がより自然で自由な構文です。