Python 按列索引重命名列数据帧

Python 按列索引重命名列数据帧,python,pandas,Python,Pandas,我想将以下数据框的第1列重命名为“Ref”。 我有很多列,因此无法重命名每个列或为每个列设置名称 data = [['TC1', 103, 563], ['TC2', 1567, 1290], ['TC3', 1467, 567]] dftrash=pd.DataFrame(data, columns = ['Card', '', '']) 这是数据帧 Card 0 TC1 1037 8563 1 TC2 1567 1290 2 TC3 1

我想将以下数据框的第1列重命名为“Ref”。 我有很多列,因此无法重命名每个列或为每个列设置名称

data = [['TC1', 103, 563], ['TC2', 1567, 1290], ['TC3', 1467, 567]] 

dftrash=pd.DataFrame(data, columns = ['Card', '', '']) 
这是数据帧

    Card        
0   TC1 1037    8563
1   TC2 1567    1290
2   TC3 1467    567
现在我想将第一列重命名为'Ref'。 我试过这个

dftrash.rename(columns={dftrash.columns[1]:'REF'},inplace=True)

它重命名所有标题与列[1]相似的列


    Card REF    REF
0   TC1 1037    8563
1   TC2 1567    1290
2   TC3 1467    567

pandas中的列是不可变的-您最好的选择是创建numpy数组,通过索引设置值并分配回:

#pandas 0.24+
a = dftrash.columns.to_numpy()
#pandas below
#a = dftrash.columns.to_numpy()
a[1] = 'REF'
print (a)
['Card' 'REF' '']
或将值转换为列表:

a = dftrash.columns.tolist()
a[1] = 'REF'
print (a)
['Card', 'REF', '']

,它现在似乎运行良好,但仍然推荐第一个解决方案:

dftrash.columns.values[1] = "REF"
print (dftrash)
  Card   REF      
0  TC1   103   563
1  TC2  1567  1290
2  TC3  1467   567

我认为这会起作用:

dftrash.columns = ['REF'] + list(dftrash.columns[1:])
它基本上创建了新的名称列表,pandas可以使用它来重命名列。或者更一般地说:

new_names = list(dftrash.columns)
new_names[0] = 'REF'
dftrash.columns = new_names

您可以提取列名,编辑列名,然后再次插入

data = [['TC1', 103, 563], ['TC2', 1567, 1290], ['TC3', 1467, 567]]
dftrash=pd.DataFrame(data, columns = ['Card', '', '']) 
colnames = list(dftrash.columns)
colnames[1] = "REF"
dftrash.set_axis(colnames, axis=1, inplace=True)

谢谢你,耶斯雷尔!这当然是一种方式。我想知道通过诸如rename(columns={1:'Ref'})这样的索引进行重命名是否有可能。我在一些线程中发现这种按索引重命名的方法,但不起作用。@Happhazard-不,它不起作用,因为列名称重复,所以需要另一种解决方案,如answer中的解决方案。
data = [['TC1', 103, 563], ['TC2', 1567, 1290], ['TC3', 1467, 567]]
dftrash=pd.DataFrame(data, columns = ['Card', '', '']) 
colnames = list(dftrash.columns)
colnames[1] = "REF"
dftrash.set_axis(colnames, axis=1, inplace=True)