DataFrame前10列列名截取后赋值返回None,请求排查解决
问题排查与解决方案
问题根源
你遇到的dfr变为None的原因有两个:
- 当使用
inplace=True参数时,rename方法会直接修改调用它的DataFrame对象,返回值为None,你把这个None赋值给了dfr,导致变量被覆盖。 iloc[:,1:11]只截取了原DataFrame的前10列(索引1到10,左闭右开),这样操作会丢失原数据的其余列,不符合你“其余列无需修改”的需求。
正确实现方式
我们需要只修改前10列的列名,同时保留所有列,避免返回None的情况,有两种常用写法:
写法一:生成新的DataFrame(推荐,避免原地修改可能带来的副作用)
# 获取需要修改的前10列的列名(索引1到10) target_cols = dfr.columns[1:11] # 构造列名映射字典:原列名 → 截取后75位之后的列名 rename_map = {col: col[75:] for col in target_cols} # 重命名指定列,返回修改后的新DataFrame dfr = dfr.rename(columns=rename_map)
写法二:原地修改原DataFrame
如果你确实需要直接修改原对象,可以使用inplace=True,但不要赋值给原变量:
target_cols = dfr.columns[1:11] rename_map = {col: col[75:] for col in target_cols} # 原地修改列名,无需赋值 dfr.rename(columns=rename_map, inplace=True)
两种写法都会只修改索引1到10的列名,其余列保持不变,也不会出现dfr变为None的问题。
内容的提问来源于stack exchange,提问作者user16239103
相关产品推荐
相关产品推荐

