Pandas重命名DataFrame列后无法提取列的问题求助
解决Pandas重命名列后无法用点访问的问题
嗨,我来帮你排查下这个问题~
你遇到的核心问题在于修改列名的方式不规范,导致DataFrame内部的属性映射没有同步更新。咱们一步步拆解:
为什么直接改columns.values会出错?
Pandas里的DataFrame.columns是一个Index对象,它本质上是**不可变(immutable)**的。你通过bank_statement.columns.values[0] = 'Din'这种方式,虽然表面上修改了列名的显示值,但DataFrame内部用于支持.属性访问的映射关系并没有被正确更新——所以你用bank_statement.Din时,Pandas找不到对应的属性,就抛出了AttributeError。
不过你可以试试用方括号访问:bank_statement['Din'],大概率是能拿到数据的,但这终究不是规范的做法。
正确的重命名列方法
推荐用以下两种标准方式来修改列名,这样不管是.还是方括号访问都能正常工作:
方法1:使用rename()方法(推荐,更灵活)
可以指定要修改的列名映射,支持批量修改,还可以选择是否原地修改:
# 原地修改(不需要重新赋值) bank_statement.rename(columns={bank_statement.columns[0]: 'Din'}, inplace=True) # 或者不原地修改,赋值给新变量 bank_statement = bank_statement.rename(columns={bank_statement.columns[0]: 'Din'})
如果你知道原来第一列的具体名称(比如Unnamed: 0),也可以直接写:
bank_statement.rename(columns={'Unnamed: 0': 'Din'}, inplace=True)
方法2:重新赋值整个columns数组
把列名转成列表修改后,再重新赋值给columns:
# 把列名转成可修改的列表 cols = bank_statement.columns.tolist() # 修改第一列的名字 cols[0] = 'Din' # 重新赋值给DataFrame的columns bank_statement.columns = cols
为什么读取CSV时能正常访问?
你读取CSV文件时,列名是Pandas从文件头直接读取并初始化的,这个过程中DataFrame已经正确建立了列名和属性的映射关系,所以用.访问自然没问题。
总结一下:避免直接修改columns.values,用Pandas提供的标准方法重命名列,就能解决这个问题啦~
内容的提问来源于stack exchange,提问作者Moni
相关产品推荐
相关产品推荐

