You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas DataFrame首列调用及重命名失效问题求助

解决Pandas读取CSV后首列无法调用和重命名的问题

核心问题:列名存在隐藏的前导/尾随空白字符,导致你用'id'或'customerid'匹配时无法命中实际列名,进而重命名无效、调用报错。

先验证问题

运行以下代码查看真实列名,确认是否有空白字符:

# 打印properties_data的所有列名
print(properties_data.columns.tolist())
# 打印customers_data的所有列名
print(customers_data.columns.tolist())

你会看到类似[' id', 'building', ...]或['customerid ', ...]的结果,列名前后带有空格。

解决方案

方案1:读取CSV时直接处理空白

读取CSV时添加skipinitialspace=True参数,自动跳过列名和字段值的前导空格,同时建议直接指定列名而非用range,避免索引偏差:

# 处理properties.csv
properties = pd.read_csv("properties.csv", skipinitialspace=True)
# 选择需要的列
properties_data = properties[['id', 'building', 'date_sale', 'type', 'property#', 'area', 'price', 'status', 'customerid']].copy()
properties_data.index.name = 'propertiesIndex'
# 重命名列
properties_data.rename(columns={
    'id': 'propertyId', 
    'date_sale': 'dateSale', 
    'property#': 'propertyNo', 
    'customerid' : 'customerId'
}, inplace=True)

# 处理customers.csv
customers = pd.read_csv("customers.csv", skipinitialspace=True)
# 选择需要的列
customers_data = customers[['customerid', 'entity', 'name', 'surname', 'birth_date', 'sex', 'country', 'state', 'purpose', 'deal_satisfaction', 'mortgage', 'source']].copy()
customers_data.index.name = 'customersIndex'
# 重命名列
customers_data.rename(columns={
    'customerid' : 'customerId', 
    'birth_date': 'birthDate', 
    'deal_satisfaction': 'dealSatisfaction'
}, inplace=True)

方案2:已读取数据后手动清理列名

如果已经加载了数据,先统一清理所有列名的前后空白,再执行重命名:

# 清理properties_data的列名
properties_data.columns = properties_data.columns.str.strip()
# 重命名列
properties_data.rename(columns={
    'id': 'propertyId', 
    'date_sale': 'dateSale', 
    'property#': 'propertyNo', 
    'customerid' : 'customerId'
}, inplace=True)

# 清理customers_data的列名
customers_data.columns = customers_data.columns.str.strip()
# 重命名列
customers_data.rename(columns={
    'customerid' : 'customerId', 
    'birth_date': 'birthDate', 
    'deal_satisfaction': 'dealSatisfaction'
}, inplace=True)

问题根源

从你的CSV样本可以看到,部分字段值带有尾随空格(如C0028 、Sold ),pandas默认不会自动处理列名的空白字符,导致列名被读取为带空格的形式,你用无空格的列名操作自然会触发KeyError。

内容的提问来源于stack exchange,提问作者Karel Prinsloo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 07:54:53