如何按规则重命名DataFrame列?原7步重命名代码失效
解决方案
先明确你的列重命名规则:除首列id外,每28列为一组,第n组(从0开始计数)的列名格式为d{n*10 + k},其中k是组内列的位置(0到27)。对应到原数据列:
- 第1-28列(数据列位置0-27)→
d0~d27 - 第29-56列(数据列位置28-56)→
d10~d127 - 第57-84列(数据列位置57-84)→
d20~d227 - …以此类推,共10组刚好覆盖280个数据列
代码实现
import numpy as np import pandas as pd # 生成示例10×281的DataFrame A = np.random.randint(10, size=(10, 281)) A_df = pd.DataFrame(A) # 将首列重命名为id A_df.rename(columns={0: 'id'}, inplace=True) # 生成符合规则的列名 total_data_cols = A_df.shape[1] - 1 # 提取数据列总数(280) # 遍历每个数据列位置,计算对应后缀 data_col_names = [f'd{(i // 28)*10 + (i % 28)}' for i in range(total_data_cols)] # 拼接首列与数据列名 A_df.columns = ['id'] + data_col_names
逻辑说明
i // 28:计算当前数据列所属的组号(每组28列,从0开始计数)i % 28:计算当前数据列在组内的位置(0到27)(i//28)*10 + (i%28):生成d后缀数字,满足每组起始数字递增10的规则- 最后将
id与生成的所有数据列名拼接,替换原DataFrame的列名
验证方式
可以打印前后部分列名确认规则是否生效:
print(A_df.columns[:30]) # 输出首列+前29个数据列,应看到id, d0~d27, d10, d11... print(A_df.columns[-30:]) # 输出最后30列,应看到d90~d927(最后一组为第9组)
内容的提问来源于stack exchange,提问作者Sadcow
相关产品推荐
相关产品推荐

