为什么我的pandas DataFrame无法识别CSV文件中的列?
问题原因
- CSV文件的表头字段和逗号之间存在多余空格,pandas读取后实际列名为
' bedrooms'(开头包含空格)而非'bedrooms',因此无法通过属性调用的方式正常访问列 - CSV每行末尾多余的逗号会导致读取时生成额外的空值列,现有清理逻辑仅能移除Unnamed类空列,没有处理列名带空格的问题
修复方案
方案1:读取CSV时自动处理格式问题
在pd.read_csv方法中添加参数,读取阶段直接完成格式清理:
import pandas as pd df = pd.read_csv("testfile.csv", skipinitialspace=True, # 自动忽略逗号后的多余空格,清理列名和字段值的前缀空格 usecols=['area', 'bedrooms', 'age', 'price']) # 仅读取指定列,自动跳过末尾逗号生成的空列 print(df.bedrooms.median())
方案2:读取后批量格式化列名
如果不便修改读取参数,可在读取后统一清理列名格式:
import pandas as pd df = pd.read_csv("testfile.csv") # 移除空值列 + 清理所有列名前后的空白字符 df = df.loc[:, ~df.columns.str.contains('^Unnamed')] df.columns = df.columns.str.strip() print(df.bedrooms.median())
补充说明
pandas的属性调用写法df.列名仅对符合Python变量命名规则、且和DataFrame内置方法/属性不重名的列生效。更稳妥的列访问方式是中括号写法df['bedrooms'],可以兼容含空格、特殊字符的列名,避免大部分访问异常。
内容的提问来源于stack exchange,提问作者user13800925
相关产品推荐
相关产品推荐

