Pandas如何重命名无名称、以数字索引的列?
解决无名称DataFrame列重命名无效的问题
先确认列名的真实情况
首先要搞清楚当前DataFrame的列名到底是什么类型、具体值是什么,这是解决问题的关键。运行以下代码查看:
# 打印所有列名 print(train_dataset_with_pred_new_df.columns) # 打印每个列名的类型 print([type(col) for col in train_dataset_with_pred_new_df.columns])
针对性解决方法
方法1:直接重新赋值列名列表(最稳妥)
不管原列名是什么类型,只要你明确列的顺序,直接给columns属性赋值新列表即可,这是最直接有效的方式:
new_column_names = [ 'timestamp', 'open', 'close', 'high', 'low', 'volume', 'CCI7', 'DI+', 'DI-', 'ADX', 'MACD Main', 'MACD Signal', 'MACD histogram', 'Fisher Transform', 'Fisher Trigger' ] # 确保新列表长度和原DataFrame列数一致 train_dataset_with_pred_new_df.columns = new_column_names
方法2:修正rename的使用方式
如果坚持用rename方法,注意两个关键点:
- 确认键的类型和列名类型完全匹配:如果列名是整数(如
int),就用整数当键;如果是字符串(如'0'),就用字符串当键。 - 原地修改或接收返回值:
rename默认返回新的DataFrame,不会修改原数据,要么加inplace=True,要么把结果赋值给原变量:
示例(假设列名是整数类型):
# 方式A:赋值给原变量 train_dataset_with_pred_new_df = train_dataset_with_pred_new_df.rename(columns={ 0: 'timestamp', 1: 'open', 2: 'close', 3: 'high', 4: 'low', 5: 'volume', 6: 'CCI7', 7: 'DI+', 8: 'DI-', 9: 'ADX', 10: 'MACD Main', 11: 'MACD Signal', 12: 'MACD histogram', 13: 'Fisher Transform', 14: 'Fisher Trigger' }) # 方式B:原地修改 train_dataset_with_pred_new_df.rename(columns={ 0: 'timestamp', 1: 'open', 2: 'close', 3: 'high', 4: 'low', 5: 'volume', 6: 'CCI7', 7: 'DI+', 8: 'DI-', 9: 'ADX', 10: 'MACD Main', 11: 'MACD Signal', 12: 'MACD histogram', 13: 'Fisher Transform', 14: 'Fisher Trigger' }, inplace=True)
方法3:统一列名类型后再重命名
如果列名是特殊数值类型(比如numpy.int64而非Python原生int),可以先转换列名类型:
# 把列名转成整数类型 train_dataset_with_pred_new_df.columns = train_dataset_with_pred_new_df.columns.astype(int) # 再用rename修改 train_dataset_with_pred_new_df.rename(columns={0: 'timestamp', ...}, inplace=True)
内容的提问来源于stack exchange,提问作者Jakub Szurlej
相关产品推荐
相关产品推荐

