元の列ラベルを置き換えるために編集する必要があるパンダと列ラベルを使用するDataFrameがあります。
A
元の列名が次のようなDataFrameの列名を変更したいと思います。
['$a', '$b', '$c', '$d', '$e']
に
['a', 'b', 'c', 'd', 'e'].
編集した列名をリストに保存していますが、列名を置き換える方法がわかりません。
元の列ラベルを置き換えるために編集する必要があるパンダと列ラベルを使用するDataFrameがあります。
A
元の列名が次のようなDataFrameの列名を変更したいと思います。
['$a', '$b', '$c', '$d', '$e']
に
['a', 'b', 'c', 'd', 'e'].
編集した列名をリストに保存していますが、列名を置き換える方法がわかりません。
回答:
それを.columns
属性に割り当てるだけです:
>>> df = pd.DataFrame({'$a':[1,2], '$b': [10,20]})
>>> df.columns = ['a', 'b']
>>> df
a b
0 1 10
1 2 20
new_columns = df.columns.values;
new_columns[0] = 'XX';
df.columns = new_columns
df.rename(columns = {'$b':'B'}, inplace = True)
df.rename()
関数を使用して、名前を変更する列を参照します。すべての列の名前を変更する必要はありません。
df = df.rename(columns={'oldName1': 'newName1', 'oldName2': 'newName2'})
# Or rename the existing DataFrame (rather than creating a copy)
df.rename(columns={'oldName1': 'newName1', 'oldName2': 'newName2'}, inplace=True)
最小限のコード例
df = pd.DataFrame('x', index=range(3), columns=list('abcde'))
df
a b c d e
0 x x x x x
1 x x x x x
2 x x x x x
次のメソッドはすべて機能し、同じ出力を生成します。
df2 = df.rename({'a': 'X', 'b': 'Y'}, axis=1) # new method
df2 = df.rename({'a': 'X', 'b': 'Y'}, axis='columns')
df2 = df.rename(columns={'a': 'X', 'b': 'Y'}) # old method
df2
X Y c d e
0 x x x x x
1 x x x x x
2 x x x x x
変更はインプレースではないので、結果を元に戻すことを忘れないでください。または、次のように指定しますinplace=True
。
df.rename({'a': 'X', 'b': 'Y'}, axis=1, inplace=True)
df
X Y c d e
0 x x x x x
1 x x x x x
2 x x x x x
v0.25以降errors='raise'
、無効なcolumn-to-renameが指定された場合にエラーを発生させるように指定することもできます。v0.25 rename()
docsを参照してください。
andとdf.set_axis()
一緒に使用します(コピーを返すため)。axis=1
inplace=False
df2 = df.set_axis(['V', 'W', 'X', 'Y', 'Z'], axis=1, inplace=False)
df2
V W X Y Z
0 x x x x x
1 x x x x x
2 x x x x x
これはコピーを返しますが、DataFrameを次のように設定することでインプレースで変更できます inplace=True
(これはバージョン<= 0.24のデフォルトの動作ですが、将来変更される可能性があります)。
ヘッダーを直接割り当てることもできます。
df.columns = ['V', 'W', 'X', 'Y', 'Z']
df
V W X Y Z
0 x x x x x
1 x x x x x
2 x x x x x
code
<class 'pandas.core.frame.DataFrame'> Int64Index:1000エントリ、0〜999データ列:BodyMarkdown 1000非nullがcode
機能します、しかしdataframe.head()を実行すると、列の古い名前が再表示されます。
SettingWithCopyWarning:
この回答で2番目のコードスニペットを使用するとなります。
df = df.rename(columns={'oldName1': 'newName1', 'oldName2': 'newName2'})
表示される名前を変更しますが、基になるデータ構造の要素は変更しません。だから、あなたがしようとdf['newName1']
すると、エラーが発生します。inplace=True
そのgotchyaを回避する必要があります。
の rename
方法は取ることができます機能を、たとえば:
In [11]: df.columns
Out[11]: Index([u'$a', u'$b', u'$c', u'$d', u'$e'], dtype=object)
In [12]: df.rename(columns=lambda x: x[1:], inplace=True)
In [13]: df.columns
Out[13]: Index([u'a', u'b', u'c', u'd', u'e'], dtype=object)
df.rename(columns=lambda x: x.lstrip(), inplace=True)
t.columns = t.columns.str.replace(r'[^\x00-\x7F]+','')
df.rename(columns=lambda x: x.replace(' ', '_'), inplace=True)
を書くdf.Column_1_Name
代わりに書けるようにするための宝石df.loc[:, 'Column 1 Name']
です。
テキストデータの操作に記載されているとおり:
df.columns = df.columns.str.replace('$','')
バージョン0.21では、列の名前変更にいくつかの重要な更新がありました。
rename
この方法は、追加したaxis
に設定することができるパラメータcolumns
又は1
。この更新により、このメソッドは他のパンダAPIと一致します。それはまだindex
ありますcolumns
パラメータますが、それらを使用する必要はありません。set_axis
方法とinplace
セットにFalse
リストにすべてのインデックスまたは列のラベルの名前を変更することができます。サンプルDataFrameを作成します。
df = pd.DataFrame({'$a':[1,2], '$b': [3,4],
'$c':[5,6], '$d':[7,8],
'$e':[9,10]})
$a $b $c $d $e
0 1 3 5 7 9
1 2 4 6 8 10
rename
するaxis='columns'
axis=1
df.rename({'$a':'a', '$b':'b', '$c':'c', '$d':'d', '$e':'e'}, axis='columns')
または
df.rename({'$a':'a', '$b':'b', '$c':'c', '$d':'d', '$e':'e'}, axis=1)
どちらも次の結果になります。
a b c d e
0 1 3 5 7 9
1 2 4 6 8 10
古いメソッドシグネチャを使用することも可能です。
df.rename(columns={'$a':'a', '$b':'b', '$c':'c', '$d':'d', '$e':'e'})
このrename
関数は、各列名に適用される関数も受け入れます。
df.rename(lambda x: x[1:], axis='columns')
または
df.rename(lambda x: x[1:], axis=1)
set_axis
リストにし、inplace=False
set_axis
列(またはインデックス)の数と同じ長さのリストをメソッドに提供できます。現在、inplace
デフォルトはTrue
ですが、将来のリリースではinplace
デフォルトになる予定False
です。
df.set_axis(['a', 'b', 'c', 'd', 'e'], axis='columns', inplace=False)
または
df.set_axis(['a', 'b', 'c', 'd', 'e'], axis=1, inplace=False)
df.columns = ['a', 'b', 'c', 'd', 'e']
ですか?このように列を直接割り当てることには何の問題もありません。それは完全に良い解決策です。
を使用する利点はset_axis
、メソッドチェーンの一部として使用できることと、DataFrameの新しいコピーを返すことです。それがないと、列を再割り当てする前に、チェーンの中間ステップを別の変数に保存する必要があります。
# new for pandas 0.21+
df.some_method1()
.some_method2()
.set_axis()
.some_method3()
# old way
df1 = df.some_method1()
.some_method2()
df1.columns = columns
df1.some_method3()
Pandas 0.21+ answer
-どういうわけか「新着情報」のパートでそのパートを逃しました...
(df .groupby(['page',pd.Grouper(key='date',freq='MS')])['clicks'].sum() .unstack(1) .rename(lambda x: x.strftime("%Y-%m"), axis='columns') )
すべての列名の$記号のみを削除したいので、次のようにできます。
df = df.rename(columns=lambda x: x.replace('$', ''))
または
df.rename(columns=lambda x: x.replace('$', ''), inplace=True)
df.columns = ['a', 'b', 'c', 'd', 'e']
既存の名前を指定した名前で、指定した順序で置き換えます。
df.columns.values
。これは誤りです。stackoverflow.com/questions/43291781/...
old_names = ['$a', '$b', '$c', '$d', '$e']
new_names = ['a', 'b', 'c', 'd', 'e']
df.rename(columns=dict(zip(old_names, new_names)), inplace=True)
この方法で、new_names
必要に応じて手動でを編集できます。スペルミスやアクセントを修正したり、特殊文字を削除したりするために数列のみの名前を変更する必要がある場合に効果的です。
df.columns = ['a', 'b', 'c', 'd', 'e']
ですが、もっと簡単だと思います。
df.columns.values
古い名前を取得するために使用できます。
myList = list(df) myList[10:20]
などなど-これは完璧です。
namez = df.columns.values
、その後、いくつかの編集が続きますdf.columns = namez
。
2つのことに焦点を当てます。
OPは明確に述べています
編集した列名をリストに保存していますが、列名を置き換える方法がわかりません。
'$'
各列ヘッダーの最初の文字を置換または削除する方法の問題を解決したくありません。OPはすでにこのステップを実行しています。代わりにcolumns
、置換列名のリストを指定して、既存のオブジェクトを新しいオブジェクトに置き換えることに焦点を当てたいと思います。
df.columns = new
new
新しい列の名前のリストはどこにあるのかというと、簡単です。このアプローチの欠点は、既存のデータフレームのcolumns
属性を編集する必要があり、インラインで実行されないことです。既存のデータフレームを編集せずにパイプライン経由でこれを実行するいくつかの方法を示します。
セットアップ1
列名を既存のリストに置き換えるために名前を変更する必要があることに焦点を当てるために、df
最初の列名と無関係な新しい列名を含む新しいサンプルデータフレームを作成します。
df = pd.DataFrame({'Jack': [1, 2], 'Mahesh': [3, 4], 'Xin': [5, 6]})
new = ['x098', 'y765', 'z432']
df
Jack Mahesh Xin
0 1 3 5
1 2 4 6
解決策1
pd.DataFrame.rename
古い列名を新しい列名にマッピングするディクショナリがある場合は、を使用できるとすでに言われていますpd.DataFrame.rename
。
d = {'Jack': 'x098', 'Mahesh': 'y765', 'Xin': 'z432'}
df.rename(columns=d)
x098 y765 z432
0 1 3 5
1 2 4 6
ただし、その辞書を簡単に作成して、への呼び出しに含めることができますrename
。以下はdf
、を反復するときに各列名を反復するという事実を利用しています。
# given just a list of new column names
df.rename(columns=dict(zip(df, new)))
x098 y765 z432
0 1 3 5
1 2 4 6
これは、元の列名が一意である場合に最適です。しかし、そうでない場合、これは失敗します。
2
つの一意でない列を設定する
df = pd.DataFrame(
[[1, 3, 5], [2, 4, 6]],
columns=['Mahesh', 'Mahesh', 'Xin']
)
new = ['x098', 'y765', 'z432']
df
Mahesh Mahesh Xin
0 1 3 5
1 2 4 6
引数
pd.concat
を使用したソリューション2keys
最初に、ソリューション1を使用しようとするとどうなるかに注意してください。
df.rename(columns=dict(zip(df, new)))
y765 y765 z432
0 1 3 5
1 2 4 6
new
リストを列名としてマップしませんでした。繰り返してしたy765
。代わりに、の列を繰り返し処理しながらkeys
、pd.concat
関数の引数を使用できますdf
。
pd.concat([c for _, c in df.items()], axis=1, keys=new)
x098 y765 z432
0 1 3 5
1 2 4 6
ソリューション3
再構築。これはdtype
、すべての列に単一の列がある場合にのみ使用してください。そうしないとdtype
object
、すべての列が最終的になり、それらを元に戻すには、より多くの辞書作業が必要になります。
シングル dtype
pd.DataFrame(df.values, df.index, new)
x098 y765 z432
0 1 3 5
1 2 4 6
混合 dtype
pd.DataFrame(df.values, df.index, new).astype(dict(zip(new, df.dtypes)))
x098 y765 z432
0 1 3 5
1 2 4 6
解決策4
これは、transpose
およびを使用したギミックset_index
です。 pd.DataFrame.set_index
インラインでインデックスを設定できますが、対応するものはありませんset_columns
。したがってset_index
、転置してから、転置して戻すことができます。ただし、同じ単一またはdtype
混合dtype
ソリューション3警告警告がここで適用されます。
シングル dtype
df.T.set_index(np.asarray(new)).T
x098 y765 z432
0 1 3 5
1 2 4 6
混合 dtype
df.T.set_index(np.asarray(new)).T.astype(dict(zip(new, df.dtypes)))
x098 y765 z432
0 1 3 5
1 2 4 6
ソリューション5の各要素を循環
するlambda
in pd.DataFrame.rename
を使用しますnew
。このソリューションでは、ラムダを渡しますx
が、無視します。それはまたかかりますが、y
期待していません。代わりに、イテレータがデフォルト値として与えられ、それを使用して、値が何であるかに関係なく、一度に1つずつ循環することができますx
。
df.rename(columns=lambda x, y=iter(new): next(y))
x098 y765 z432
0 1 3 5
1 2 4 6
そして、sopythonチャットの人々が私に指摘したように、*
との間にaを追加するx
とy
、y
変数を保護できます。ただし、このコンテキストでは、保護する必要があるとは思いません。それはまだ言及する価値があります。
df.rename(columns=lambda x, *, y=iter(new): next(y))
x098 y765 z432
0 1 3 5
1 2 4 6
df.rename(lambda x : x.lstrip('$'),axis=1)
x
が無視されていると言うとき、私はあなたが何を意味しているのかよくわかりませんか?
裏で何が起こっているのかを少し説明したいと思います。
データフレームはシリーズのセットです。
順番にシリーズはの延長です numpy.array
numpy.array
sにはプロパティがあります .name
シリーズの名前です。パンダがこの属性を尊重することはめったにありませんが、それは場所に残り、いくつかのパンダの動作をハッキングするために使用できます。
ここでの答えの多くは、実際にはであるdf.columns
属性がであると述べています。これは、属性があることを意味します。list
Series
.name
列の名前を入力すると、次のようになりますSeries
。
df.columns = ['column_one', 'column_two']
df.columns.names = ['name of the list of columns']
df.index.names = ['name of the index']
name of the list of columns column_one column_two
name of the index
0 4 1
1 5 2
2 6 3
インデックスの名前は常に1列下に来ることに注意してください。
.name
属性は時々に残ります。設定df.columns = ['one', 'two']
するdf.one.name
と、になります'one'
。
あなたが設定した場合df.one.name = 'three'
、その後df.columns
まだあなたを与えるだろう['one', 'two']
、とdf.one.name
あなたを与えるだろう'three'
pd.DataFrame(df.one)
戻ります
three
0 1
1 2
2 3
パンダ.name
はすでに定義されているものを再利用するからSeries
です。
パンダには、多層の列名を作成する方法があります。それほど魔法は関係していませんが、誰かがこれをここで取り上げているのを見かけないので、私もこれを私の答えでカバーしたいと思いました。
|one |
|one |two |
0 | 4 | 1 |
1 | 5 | 2 |
2 | 6 | 3 |
これは、次のように列をリストに設定することで簡単に実現できます。
df.columns = [['one', 'one'], ['one', 'two']]
データフレームがある場合、df.columnsはすべてを操作可能なリストにダンプし、列の名前としてデータフレームに再割り当てします...
columns = df.columns
columns = [row.replace("$","") for row in columns]
df.rename(columns=dict(zip(columns, things)), inplace=True)
df.head() #to validate the output
最良の方法?IDK。方法-はい。
質問への回答で提案されたすべての主要な手法を評価するより良い方法は、cProfileを使用してメモリと実行時間を測定することです。@ kadee、@ kaitlyn、および@eumiroには、実行時間が最も速い関数がありました。これらの関数は非常に高速ですが、すべての回答について.000秒と.001秒の丸めを比較しています。道徳:上記の私の答えはおそらく「最良の」方法ではありません。
import pandas as pd
import cProfile, pstats, re
old_names = ['$a', '$b', '$c', '$d', '$e']
new_names = ['a', 'b', 'c', 'd', 'e']
col_dict = {'$a': 'a', '$b': 'b','$c':'c','$d':'d','$e':'e'}
df = pd.DataFrame({'$a':[1,2], '$b': [10,20],'$c':['bleep','blorp'],'$d':[1,2],'$e':['texa$','']})
df.head()
def eumiro(df,nn):
df.columns = nn
#This direct renaming approach is duplicated in methodology in several other answers:
return df
def lexual1(df):
return df.rename(columns=col_dict)
def lexual2(df,col_dict):
return df.rename(columns=col_dict, inplace=True)
def Panda_Master_Hayden(df):
return df.rename(columns=lambda x: x[1:], inplace=True)
def paulo1(df):
return df.rename(columns=lambda x: x.replace('$', ''))
def paulo2(df):
return df.rename(columns=lambda x: x.replace('$', ''), inplace=True)
def migloo(df,on,nn):
return df.rename(columns=dict(zip(on, nn)), inplace=True)
def kadee(df):
return df.columns.str.replace('$','')
def awo(df):
columns = df.columns
columns = [row.replace("$","") for row in columns]
return df.rename(columns=dict(zip(columns, '')), inplace=True)
def kaitlyn(df):
df.columns = [col.strip('$') for col in df.columns]
return df
print 'eumiro'
cProfile.run('eumiro(df,new_names)')
print 'lexual1'
cProfile.run('lexual1(df)')
print 'lexual2'
cProfile.run('lexual2(df,col_dict)')
print 'andy hayden'
cProfile.run('Panda_Master_Hayden(df)')
print 'paulo1'
cProfile.run('paulo1(df)')
print 'paulo2'
cProfile.run('paulo2(df)')
print 'migloo'
cProfile.run('migloo(df,old_names,new_names)')
print 'kadee'
cProfile.run('kadee(df)')
print 'awo'
cProfile.run('awo(df)')
print 'kaitlyn'
cProfile.run('kaitlyn(df)')
これがあなたのデータフレームだとしましょう。
2つの方法を使用して列の名前を変更できます。
使用する dataframe.columns=[#list]
df.columns=['a','b','c','d','e']
このメソッドの制限は、1つの列を変更する必要がある場合、完全な列リストを渡す必要があることです。また、このメソッドはインデックスラベルには適用できません。たとえば、これを渡した場合:
df.columns = ['a','b','c','d']
これはエラーになります。長さの不一致:予期される軸には5つの要素があり、新しい値には4つの要素があります。
別の方法は、rename()
インデックス、列、または行の名前を変更するために使用されるPandas メソッドです
df = df.rename(columns={'$a':'a'})
同様に、任意の行または列を変更できます。
df = pd.DataFrame({'$a': [1], '$b': [1], '$c': [1], '$d': [1], '$e': [1]})
新しい列のリストが既存の列と同じ順序である場合、割り当ては簡単です。
new_cols = ['a', 'b', 'c', 'd', 'e']
df.columns = new_cols
>>> df
a b c d e
0 1 1 1 1 1
古い列名を新しい列名にキー付けしたディクショナリがある場合、次の操作を実行できます。
d = {'$a': 'a', '$b': 'b', '$c': 'c', '$d': 'd', '$e': 'e'}
df.columns = df.columns.map(lambda col: d[col]) # Or `.map(d.get)` as pointed out by @PiRSquared.
>>> df
a b c d e
0 1 1 1 1 1
リストまたは辞書のマッピングがない場合は$
、リスト内包表記を使用して先頭の記号を取り除くことができます。
df.columns = [col[1:] if col[0] == '$' else col for col in df]
lambda col: d[col]
あなたが渡すことができますd.get
...それは次のようになりますdf.columns.map(d.get)
df.rename(index=str,columns={'A':'a','B':'b'})
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.rename.html
小さな例で名前の変更を理解しましょう...
1.マッピングを使用して列の名前を変更する:
df = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]}) #creating a df with column name A and B
df.rename({"A": "new_a", "B": "new_b"},axis='columns',inplace =True) #renaming column A with 'new_a' and B with 'new_b'
output:
new_a new_b
0 1 4
1 2 5
2 3 6
2.マッピングを使用してindex / Row_Nameの名前を変更します:
df.rename({0: "x", 1: "y", 2: "z"},axis='index',inplace =True) #Row name are getting replaced by 'x','y','z'.
output:
new_a new_b
x 1 4
y 2 5
z 3 6
元の列ラベルを置き換えるもう1つの方法は、元の列ラベルから不要な文字(ここでは「$」)を取り除くことです。
これは、df.columnsに対してforループを実行し、ストリップされた列をdf.columnsに追加することで実行できます。
代わりに、以下のようなリスト内包表記を使用することにより、1つのステートメントでこれをきれいに行うことができます。
df.columns = [col.strip('$') for col in df.columns]
(strip
Pythonのメソッドは、指定された文字を文字列の最初と最後から削除します。)
本当にシンプルな使い方
df.columns = ['Name1', 'Name2', 'Name3'...]
そして、それはあなたがそれらを入れた順序で列名を割り当てます
私はこの質問と答えが噛み殺されたことを知っています。しかし、私が抱えていた問題の1つにインスピレーションを得るためにそれを参照しました。私はさまざまな答えからの断片を使用してそれを解決することができたので、誰かがそれを必要とする場合に備えて私の応答を提供しました。
私の方法は、delimiters=
変数をコンマで区切って区切り文字を追加し、将来を保証できる汎用的な方法です。
作業コード:
import pandas as pd
import re
df = pd.DataFrame({'$a':[1,2], '$b': [3,4],'$c':[5,6], '$d': [7,8], '$e': [9,10]})
delimiters = '$'
matchPattern = '|'.join(map(re.escape, delimiters))
df.columns = [re.split(matchPattern, i)[1] for i in df.columns ]
出力:
>>> df
$a $b $c $d $e
0 1 3 5 7 9
1 2 4 6 8 10
>>> df
a b c d e
0 1 3 5 7 9
1 2 4 6 8 10
これらのアプローチはMultiIndexでは機能しないことに注意してください。MultiIndexの場合、次のようなことを行う必要があります。
>>> df = pd.DataFrame({('$a','$x'):[1,2], ('$b','$y'): [3,4], ('e','f'):[5,6]})
>>> df
$a $b e
$x $y f
0 1 3 5
1 2 4 6
>>> rename = {('$a','$x'):('a','x'), ('$b','$y'):('b','y')}
>>> df.columns = pandas.MultiIndex.from_tuples([
rename.get(item, item) for item in df.columns.tolist()])
>>> df
a b e
x y f
0 1 3 5
1 2 4 6
あなたが提供できないシステムによって指定された列の負荷に対処する必要がある場合は、一般的なアプローチと特定の置換を一度に組み合わせた次のアプローチを思いつきました。
最初に列名の特定の付録を破棄するために正規表現を使用してデータフレーム列名からディクショナリを作成し、次に特定の置換をディクショナリに追加して、後で受信側データベースで期待されるようにコア列に名前を付けます。
これは、一度にデータフレームに適用されます。
dict=dict(zip(df.columns,df.columns.str.replace('(:S$|:C1$|:L$|:D$|\.Serial:L$)','')))
dict['brand_timeseries:C1']='BTS'
dict['respid:L']='RespID'
dict['country:C1']='CountryID'
dict['pim1:D']='pim_actual'
df.rename(columns=dict, inplace=True)
すでに提供されている解決策に加えて、ファイルの読み取り中にすべての列を置き換えることができます。それを使用names
しheader=0
て実行できます。
まず、列名として使用する名前のリストを作成します。
import pandas as pd
ufo_cols = ['city', 'color reported', 'shape reported', 'state', 'time']
ufo.columns = ufo_cols
ufo = pd.read_csv('link to the file you are using', names = ufo_cols, header = 0)
この場合、すべての列名は、リストにある名前に置き換えられます。
これは、タイピングを減らすために使用したい気の利いた小さな関数です。
def rename(data, oldnames, newname):
if type(oldnames) == str: #input can be a string or list of strings
oldnames = [oldnames] #when renaming multiple columns
newname = [newname] #make sure you pass the corresponding list of new names
i = 0
for name in oldnames:
oldvar = [c for c in data.columns if name in c]
if len(oldvar) == 0:
raise ValueError("Sorry, couldn't find that column in the dataset")
if len(oldvar) > 1: #doesn't have to be an exact match
print("Found multiple columns that matched " + str(name) + " :")
for c in oldvar:
print(str(oldvar.index(c)) + ": " + str(c))
ind = input('please enter the index of the column you would like to rename: ')
oldvar = oldvar[int(ind)]
if len(oldvar) == 1:
oldvar = oldvar[0]
data = data.rename(columns = {oldvar : newname[i]})
i += 1
return data
これがどのように機能するかの例です:
In [2]: df = pd.DataFrame(np.random.randint(0,10,size=(10, 4)), columns=['col1','col2','omg','idk'])
#first list = existing variables
#second list = new names for those variables
In [3]: df = rename(df, ['col','omg'],['first','ohmy'])
Found multiple columns that matched col :
0: col1
1: col2
please enter the index of the column you would like to rename: 0
In [4]: df.columns
Out[5]: Index(['first', 'col2', 'ohmy', 'idk'], dtype='object')
正規表現を使用できると仮定します。このソリューションにより、正規表現を使用して手動でエンコードする必要がなくなります
import pandas as pd
import re
srch=re.compile(r"\w+")
data=pd.read_csv("CSV_FILE.csv")
cols=data.columns
new_cols=list(map(lambda v:v.group(),(list(map(srch.search,cols)))))
data.columns=new_cols