0

データフレームがあり、列名を変更したいと考えています。現在、転置、再索引付け、転置バックを含む以下の方法を使用しています。もっと簡単な方法があるはずです.....

任意の提案をいただければ幸いです

import pandas as pd

#make a dataframe with wacky column names
d = {'garbled #### one' : pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd']),
     'garbled ### two' : pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)

#fix the column names by transposing, reseting index, string manipulation,
#and transposing back  
df = df.T
df = df.reset_index()
df['index'] = df['index'].apply(lambda x: x.split()[0]+ " " +x.split()[2])
df = df.set_index('index')
df = df.T
df

index   garbled two garbled one
a    1   1
b    2   2
c    3   3
d    4   4

ありがとう、ザックcp

4

2 に答える 2

2

rename_axis列を作成/削除せずに名前を変更できます。名前の変更は関数または 1 対 1 のマッピング (dict のような) で行うことができ、マッピングは部分的に行うことができます (すべての名前を含める必要はありません)。

In [42]: df
Out[42]: 
   garbled #### one  garbled #### two
a                 1                 1
b                 2                 2
c                 3                 3
d                 4                 4

In [43]: df.rename_axis(lambda x: x.split()[0]+ " " +x.split()[2])
Out[43]: 
   garbled one  garbled two
a            1            1
b            2            2
c            3            3
d            4            4

In [44]: df.rename_axis({'garbled #### one': 'one', 'garbled #### two': 'two'})
Out[44]: 
   one  two
a    1    1
b    2    2
c    3    3
d    4    4
于 2013-04-10T17:55:54.503 に答える
1

私は問題を過小評価しているかもしれませんが、ここではかなり簡単な方法を示します。

次を使用して、列名のリストを取得します (実際にはpd.Index)。

df.columns

列名を反復処理して、文字化けがないかどうかを確認します。名前が文字化けしている列が見つかった場合は、適切な名前で新しい列を作成し、次のように古い列を削除します。

df["good-one"] = df["garbled #### one"]
del df["garbled #### one"]

テーブルが巨大で、コピーされるデータの量が問題にならない限り、これでうまくいきます。

于 2013-04-10T15:31:46.570 に答える