使用.reindex()调整列顺序后列值变为NaN是什么原因?
问题原因
pandas 中reindex()的核心作用是索引对齐,而非单纯调整列顺序。当你传入的列名列表中存在和原数据集列名不完全匹配的内容时,reindex()会默认将不匹配的列填充为NaN,不会抛出报错。你遇到的Key Passes Per Game列全为NaN,基本都是因为该列在原数据中的实际名称和你传入的写法有细微差异,比如大小写不同、前后多了空格、存在隐藏特殊字符、拼写有出入等。
解决方法
- 先核对原数据集的真实列名,运行以下代码输出所有列名逐一对比即可找到差异:
print(messi_dataset.columns.tolist()) - 仅调整已有列的顺序时,更推荐直接用列名列表索引的方式实现,该方式如果列名不匹配会直接报错,不会出现静默生成NaN的问题,示例代码如下:
custom_order = ['Season','Team','Competition','Appearances','Minutes','Goals','Assists','Goals+Assists','Goals per 90','Assists per 90','Key Passes Per Game','Shots Per Game','Successful Dribbles','Average Match Rating'] messi_dataset = messi_dataset[custom_order]
- 如果需要保留
reindex()的使用,可以先统一处理列名格式消除差异后再操作,比如统一去除首尾空格、转换为小写:
# 统一处理原数据集列名格式 messi_dataset.columns = messi_dataset.columns.str.strip().str.lower() # 传入和处理后格式匹配的列名列表 messi_dataset = messi_dataset.reindex(columns = ['season','team','competition','appearances','minutes','goals','assists','goals+assists','goals per 90','assists per 90','key passes per game','shots per game','successful dribbles','average match rating'])
内容的提问来源于stack exchange,提问作者George Zambrano
相关产品推荐
相关产品推荐

