当前位置: 首页 > 知识库问答 >
问题:

按列索引重命名列数据帧

王辉
2023-03-14

我想将以下数据框的第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

共有3个答案

邓季
2023-03-14

我认为这将完成这项工作:

dftrash.columns = ['REF'] + list(dftrash.columns[1:])

基本上,它创建了熊猫可以用来重命名列的新名称列表。或者更一般地说:

new_names = list(dftrash.columns)
new_names[0] = 'REF'
dftrash.columns = new_names
汝宏伯
2023-03-14

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

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)
鄂昌胤
2023-03-14

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

在过去版本的pandas中,问题被分配到numpy阵列,现在它似乎工作正常,但仍然推荐第一个解决方案:

dftrash.columns.values[1] = "REF"
print (dftrash)
  Card   REF      
0  TC1   103   563
1  TC2  1567  1290
2  TC3  1467   567
 类似资料:
  • 假设是一个数据帧。 只接受名字 只接受整数(实际放置) 接受名称和整数: 当引用行时,只希望获得名称。例如 抛出一个错误,它不会返回“2”。 当引用列时,iloc更喜欢整数,而不是名称。例如 返回“三”,而不是2。(尽管返回)。 奇怪的是,我喜欢完全相反的功能。通常我的列名非常有意义,所以在我的代码中我直接引用它们。但是由于大量的观察清理,我的熊猫数据帧中的行名称通常不对应于。 我意识到我可以使用

  • 是否有任何方法可以在数据框中按索引(即整数)选择行,按列名选择列? 我尝试使用loc,但它返回一个错误,我知道iloc只适用于索引。 这是数据帧df的第一行。我愿意选择第一行,名为“Volume”的列,并尝试使用df.loc[0,'Volume']

  • 以下脚本: Floor1正在正确执行,Floor2使用相同的df执行,但使用重命名的列则不正确。我得到一个关键错误: 我知道,有一个类似的问题:重命名列后get keyerror 但我并没有真正得到答案,更重要的是,我没有找到解决办法。

  • 我正在用PySpark DataFrames分析一些数据。假设我有一个正在聚合的数据帧< code>df: 这将给我: 聚合工作得很好,但我不喜欢新的列名。有没有办法将此列重命名为人类可以从方法中读取的内容?也许更类似于中的操作:

  • 9.2.1. 识别符限制条件 9.2.2. 识别符大小写敏感性 数据库、表、索引、列和别名是识别符。该节描述了在MySQL中识别符的允许的语法。 下面的表描述了每类识别符的最大长度和允许的字符。 识别符 最大长度(字节) 允许的字符 数据库 64 目录名允许的任何字符,不包括‘/’、‘\’或者‘。’ 表 64 文件名允许的任何字符,不包括‘/’、‘\’或者‘。’ 列 64 所有字符 索引 64 所

  • 有没有比调用多个帧更好的方法来同时为给定的 SparkSQL 添加前缀或重命名所有或多个列? 例如,如果我想检测更改(使用完全外连接)。然后我剩下两个具有相同结构的< code >数据帧。