修改Pandas DataFrame行索引为Male/Female后值变NaN的修复方法
问题原因及修复方案
你遇到的问题是因为错误地重新创建DataFrame并指定新索引,导致Pandas尝试将新索引与原DataFrame的索引对齐,但两者完全不匹配,最终填充NaN。
原代码中,你已经有一个名为Age_dist的DataFrame,再调用pd.DataFrame(Age_dist, index=index_labels)时,Pandas会以新索引['Male','Female']去匹配原DataFrame的索引[1,1],没有匹配项所以所有值变为NaN。
正确的修复方法
方法1:直接修改现有DataFrame的索引属性
index_labels = ['Male', 'Female'] Age_dist.index = index_labels
方法2:使用set_axis方法(推荐,支持链式操作)
Age_dist = Age_dist.set_axis(['Male', 'Female'], axis=0) # 或者更清晰的写法 Age_dist = Age_dist.set_axis(['Male', 'Female'], axis='index')
完整示例(含原DataFrame构造)
如果需要先构造你的原始DataFrame,可以参考这段代码:
import pandas as pd # 构造原始数据 data = [ [-692, -772, -741, -698, -707, -511, -371, -203, -95, -17, -8, -1.0], [676, 771, 808, 865, 815, 581, 400, 226, 102, 15, 8, 0.0] ] columns = ['0-9', '10-19', '20-29', '30-39', '40-49', '50-59', '60-69', '70-79', '80-89', '90-99', '100-109', '110-119'] Age_dist = pd.DataFrame(data, index=[1,1], columns=columns) # 修改索引 Age_dist.index = ['Male', 'Female'] print(Age_dist)
执行后会得到正确的结果:
0-9 10-19 20-29 30-39 40-49 50-59 60-69 70-79 80-89 90-99 100-109 110-119 Male -692 -772 -741 -698 -707 -511 -371 -203 -95 -17 -8 -1.0 Female 676 771 808 865 815 581 400 226 102 15 8 0.0
内容的提问来源于stack exchange,提问作者Francis
相关产品推荐
相关产品推荐

