按列索引熊猫数据框重命名列
Posted
技术标签:
【中文标题】按列索引熊猫数据框重命名列【英文标题】:Rename column by column index pandas dataframe 【发布时间】:2019-11-01 01:39:35 【问题描述】:我想将以下数据框的第 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)
将所有具有与 column[1] 相似标题的列重命名。
Card REF REF
0 TC1 1037 8563
1 TC2 1567 1290
2 TC3 1467 567
【问题讨论】:
【参考方案1】: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 = a
print (dftrash)
Card REF
0 TC1 103 563
1 TC2 1567 1290
2 TC3 1467 567
In past versions of pandas was problem assign to numpy array,现在看起来效果不错,但仍然推荐第一个解决方案:
dftrash.columns.values[1] = "REF"
print (dftrash)
Card REF
0 TC1 103 563
1 TC2 1567 1290
2 TC3 1467 567
【讨论】:
谢谢耶兹瑞尔!这当然是一种方式。我想知道是否可以通过诸如 rename(columns=1:'Ref') 之类的索引进行重命名。我在某些线程中发现此按索引重命名但不起作用。 @haphaZard - 不,它不工作,因为重复的列名,所以需要另一个解决方案,如答案。【参考方案2】:我认为这可以完成工作:
dftrash.columns = ['REF'] + list(dftrash.columns[1:])
它基本上创建了新的名称列表,熊猫可以使用它来重命名列。或更笼统地说:
new_names = list(dftrash.columns)
new_names[0] = 'REF'
dftrash.columns = new_names
【讨论】:
【参考方案3】:您可以提取列名,编辑列名,然后再次插入
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)
【讨论】:
以上是关于按列索引熊猫数据框重命名列的主要内容,如果未能解决你的问题,请参考以下文章