如何通过for循环为DataFrame所有列重命名为指定lag后缀格式?
DataFrame列名批量重命名为指定格式的正确方法
问题分析
你给出的两种写法都存在问题:
- 第一种写法用了双重循环,会生成
lag倍的列名(比如lag=2时会生成A_lag_1、B_lag_1…A_lag_2、B_lag_2…),不符合只给每个列名添加一次_lag_2的需求。 - 第二种写法直接将整数
lag和字符串拼接,会触发TypeError,因为Python不允许整数与字符串直接相加。
正确实现方式
方法1:使用f-string(推荐)
直接遍历列名,用f-string格式化生成新列名,f-string会自动处理整数到字符串的类型转换:
exog_pred.columns = [f'{col}_lag_{lag}' for col in exog_pred.columns]
方法2:字符串拼接(需手动转换lag类型)
先把lag转为字符串后再进行拼接:
exog_pred.columns = [col + "_lag_" + str(lag) for col in exog_pred.columns]
方法3:使用DataFrame的rename方法
如果需要更灵活的列处理逻辑,也可以用rename方法配合lambda函数:
exog_pred = exog_pred.rename(columns=lambda col: f'{col}_lag_{lag}')
以上三种方法都能实现将列名批量修改为列名_lag_指定值的格式,比如原列名A、B、C,lag=2时,会得到A_lag_2、B_lag_2、C_lag_2。
内容的提问来源于stack exchange,提问作者Nirav Prajapati
相关产品推荐
相关产品推荐

