更改多个列名但不是全部 - Pandas Python

时间:2016-06-29 13:26:50

标签: python pandas dataframe

我想知道是否有更改特定列名但没有选择特定名称或不更改所有列名的功能。

我有代码:

df=df.rename(columns = {'nameofacolumn':'newname'})

但是有了它,我必须手动改变每个人写下每个名字。 还要改变所有这些我

df = df.columns['name1','name2','etc']

我希望有一个功能可以更改第1列和第3列,而无需仅仅在说明其位置时写下自己的名字。谢谢!

5 个答案:

答案 0 :(得分:15)

您可以使用dict理解并将其传递给rename

In [246]:
df = pd.DataFrame(columns=list('abc'))
new_cols=['d','e']
df.rename(columns=dict(zip(df.columns[1:], new_cols)),inplace=True)
df

Out[246]:
Empty DataFrame
Columns: [a, d, e]
Index: []

如果您传递序数位置列表,它也有效:

df.rename(columns=dict(zip(df.columns[[1,2]], new_cols)),inplace=True)

答案 1 :(得分:13)

说你有一个新列名的字典和他们应该替换的列的名称:

df.rename(columns={'old_col':'new_col', 'old_col_2':'new_col_2'}, inplace=True)

但是,如果你没有这个,而你只有索引,你可以这样做:

column_indices = [1,4,5,6]
new_names = ['a','b','c','d']
old_names = df.columns[column_indices]
df.rename(columns=dict(zip(old_names, new_names)), inplace=True)

答案 2 :(得分:12)

您根本不需要使用重命名方法。

您只需使用列表将旧列名替换为新列名。要重命名第1列和第3列(使用索引0和2),您可以执行以下操作:

df.columns.values[[0, 2]] = ['newname0', 'newname2']

或者如果你使用的是比0.16.0更旧的熊猫版本,你可以:

df.keys().values[[0, 2]] = ['newname0', 'newname2']

这种方法的优点是,您不需要使用语法df = df.rename复制整个数据框,只需更改索引值。

答案 3 :(得分:1)

您应该能够使用..df.columns [index]

按索引引用列
>> temp = pd.DataFrame(np.random.randn(10, 5),columns=['a', 'b', 'c', 'd', 'e'])
>> print(temp.columns[0])
   a  
>> print(temp.columns[1])
   b

因此,要更改特定列的值,首先将值分配给数组并仅更改所需的值

>> newcolumns=temp.columns.values
>> newcolumns[0] = 'New_a'

将新数组分配回列中,您将拥有所需内容

>> temp.columns = newcolumns
>> temp.columns
>> print(temp.columns[0])
   New_a

答案 4 :(得分:0)

如果你有 {position: new_name} 的字典,你可以使用 items()

例如

new_columns = {3: 'fourth_column'}
df.rename(columns={df.columns[i]: new_col for i, new_col in new_cols.items()})

完整示例:

$ ipython
Python 3.7.10 | packaged by conda-forge | (default, Feb 19 2021, 16:07:37) 
Type 'copyright', 'credits' or 'license' for more information
IPython 7.24.1 -- An enhanced Interactive Python. Type '?' for help.

In [1]: import numpy as np
   ...: import pandas as pd
   ...: 
   ...: rng = np.random.default_rng(seed=0)
   ...: df = pd.DataFrame({key: rng.uniform(size=3) for key in list('abcde')})
   ...: df
Out[1]: 
          a         b         c         d         e
0  0.636962  0.016528  0.606636  0.935072  0.857404
1  0.269787  0.813270  0.729497  0.815854  0.033586
2  0.040974  0.912756  0.543625  0.002739  0.729655

In [2]: new_columns = {3: 'fourth_column'}
   ...: df.rename(columns={df.columns[i]: new_col for i, new_col in new_columns.items()})
Out[2]: 
          a         b         c  fourth_column         e
0  0.636962  0.016528  0.606636       0.935072  0.857404
1  0.269787  0.813270  0.729497       0.815854  0.033586
2  0.040974  0.912756  0.543625       0.002739  0.729655

In [3]: