250

というデータフレームがありdataます。唯一の列ヘッダーの名前を変更するにはどうすればよいですか? たとえばgdplog(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
4

7 に答える 7

526
data.rename(columns={'gdp':'log(gdp)'}, inplace=True)

renamedict をパラメーターとして受け入れることを示しているcolumnsため、単一のエントリで dict を渡すだけです。

関連も参照

于 2013-11-03T21:32:01.623 に答える
42

list-comprehension単一の列の名前を変更する必要がある場合は、はるかに高速な実装を使用できます。

df.columns = ['log(gdp)' if x=='gdp' else x for x in df.columns]

複数の列の名前を変更する必要が生じた場合は、次のような条件式を使用します。

df.columns = ['log(gdp)' if x=='gdp' else 'cap_mod' if x=='cap' else x for x in df.columns]

または、 を使用してマッピングを作成し、デフォルト値を古い名前として設定して操作dictionaryを実行します。list-comprehensionget

col_dict = {'gdp': 'log(gdp)', 'cap': 'cap_mod'}   ## key→old name, value→new name

df.columns = [col_dict.get(x, x) for x in df.columns]

タイミング:

%%timeit
df.rename(columns={'gdp':'log(gdp)'}, inplace=True)
10000 loops, best of 3: 168 µs per loop

%%timeit
df.columns = ['log(gdp)' if x=='gdp' else x for x in df.columns]
10000 loops, best of 3: 58.5 µs per loop
于 2016-09-23T09:17:35.220 に答える
7

パンダの特定の列の名前を変更するには、少なくとも 5 つの異なる方法があり、元の回答へのリンクと共にそれらを以下にリストします。また、これらのメソッドの時間を測定したところ、ほぼ同じように実行されることがわかりました (ただし、YMMV はデータ セットとシナリオによって異なります)。以下のテスト ケースは、列が 100 万行を含むデータ フレームで列の名前A M N Zをに変更することです。A2 M2 N2 Z2AZ

# Import required modules
import numpy as np
import pandas as pd
import timeit

# Create sample data
df = pd.DataFrame(np.random.randint(0,9999,size=(1000000, 26)), columns=list('ABCDEFGHIJKLMNOPQRSTUVWXYZ'))

# Standard way - https://stackoverflow.com/a/19758398/452587
def method_1():
    df_renamed = df.rename(columns={'A': 'A2', 'M': 'M2', 'N': 'N2', 'Z': 'Z2'})

# Lambda function - https://stackoverflow.com/a/16770353/452587
def method_2():
    df_renamed = df.rename(columns=lambda x: x + '2' if x in ['A', 'M', 'N', 'Z'] else x)

# Mapping function - https://stackoverflow.com/a/19758398/452587
def rename_some(x):
    if x=='A' or x=='M' or x=='N' or x=='Z':
        return x + '2'
    return x
def method_3():
    df_renamed = df.rename(columns=rename_some)

# Dictionary comprehension - https://stackoverflow.com/a/58143182/452587
def method_4():
    df_renamed = df.rename(columns={col: col + '2' for col in df.columns[
        np.asarray([i for i, col in enumerate(df.columns) if 'A' in col or 'M' in col or 'N' in col or 'Z' in col])
    ]})

# Dictionary comprehension - https://stackoverflow.com/a/38101084/452587
def method_5():
    df_renamed = df.rename(columns=dict(zip(df[['A', 'M', 'N', 'Z']], ['A2', 'M2', 'N2', 'Z2'])))

print('Method 1:', timeit.timeit(method_1, number=10))
print('Method 2:', timeit.timeit(method_2, number=10))
print('Method 3:', timeit.timeit(method_3, number=10))
print('Method 4:', timeit.timeit(method_4, number=10))
print('Method 5:', timeit.timeit(method_5, number=10))

出力:

Method 1: 3.650640267
Method 2: 3.163998427
Method 3: 2.998530871
Method 4: 2.9918436889999995
Method 5: 3.2436501520000007

最も直感的で、アプリケーションに実装するのが最も簡単な方法を使用してください。

于 2020-04-19T22:52:19.933 に答える
-1

雌羊はテーブルをやり直すことで名前を変更できます

df = pd.DataFrame()
column_names = mydataframe.columns
for i in range(len(mydataframe)):
  column = mydataframe.iloc[:,i]
  df[column_names[i][:-8]+"desigred_texnt"] = column
print(df.columns)
于 2021-12-06T20:00:58.880 に答える