pandas中按索引范围批量修改列名的日期时间格式
问题原因
你之前的操作逻辑错误才导致数据损坏:df.iloc[:, 13:] = 重命名后的子df是对DataFrame的数据区域做切片赋值,右侧重命名后的子df列名已经更新为Sep 2018这类新名称,和原df对应区域的旧列名不匹配,pandas赋值时会默认按列名对齐,找不到匹配列就会生成缺失值,覆盖原有数据。
修改列名不需要碰数据区域,只要调整df.columns的对应部分即可,两种稳妥实现方式如下:
方法1:直接替换指定区间的列名
如果你的列名本身已经是Timestamp类型:
# 生成第13列及之后的新列名 new_cols = ['{:%b %Y}'.format(col) for col in df.columns[13:]] # 替换原列名对应区间 df.columns = df.columns[:13].tolist() + new_cols
如果你的列名是字符串格式的时间戳,先做日期转换即可:
import pandas as pd new_cols = pd.to_datetime(df.columns[13:]).strftime('%b %Y').tolist() df.columns = df.columns[:13].tolist() + new_cols
方法2:通过rename方法映射修改
这种方法不需要拼接列名列表,出错概率更低:
import pandas as pd # 生成旧列名到新列名的映射字典 col_mapper = { old_col: pd.to_datetime(old_col).strftime('%b %Y') for old_col in df.columns[13:] } # 仅修改列名,不影响任何数据 df.rename(columns=col_mapper, inplace=True)
内容的提问来源于stack exchange,提问作者ande
相关产品推荐
相关产品推荐

