我有一个叫data的数据框架。如何重命名仅有的一个列标题?比如gdp to 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
我有一个叫data的数据框架。如何重命名仅有的一个列标题?比如gdp to 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
当前回答
使用pandas.DataFrame.rename函数。 检查这个链接的描述。
data.rename(columns = {'gdp': 'log(gdp)'}, inplace = True)
如果您打算重命名多个列,那么
data.rename(columns = {'gdp': 'log(gdp)', 'cap': 'log(cap)', ..}, inplace = True)
其他回答
data.rename(columns={'gdp':'log(gdp)'}, inplace=True)
重命名表明它接受dict作为列的参数,因此您只需传递一个带有单个条目的dict。
另见相关
至少有五种不同的方法来重命名pandas中的特定列,我在下面列出了它们以及原始答案的链接。我还对这些方法进行了计时,发现它们的执行情况大致相同(不过YMMV取决于您的数据集和场景)。下面的测试用例是将数据框架中的列A M N Z重命名为A2 M2 N2 Z2,其中列A到Z包含一百万行。
# 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
使用对您来说最直观、最容易在应用程序中实现的方法。
如果需要重命名单个列,则使用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]
或者,使用字典构造一个映射,并通过将默认值设置为旧名称来执行它的get操作的list-comprehension:
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
df.rename(columns=lambda x: {"My_sample": "My_sample_new_name"}.get(x, x))
使用pandas.DataFrame.rename函数。 检查这个链接的描述。
data.rename(columns = {'gdp': 'log(gdp)'}, inplace = True)
如果您打算重命名多个列,那么
data.rename(columns = {'gdp': 'log(gdp)', 'cap': 'log(cap)', ..}, inplace = True)