Pandas DataFrame设置列名后数据全部丢失的原因是什么
问题原因
你两次调用pd.DataFrame时传入的数据源和列名匹配逻辑冲突,导致空值生成:
- 执行
pd.concat([MIN, MAX, RANGE, MEAN, MED], axis=1)后,你得到的已经是一个列名为[0,1,2,3,4]的DataFrame - 当你再次调用
pd.DataFrame(data=sum_stats, columns=columns)时,Pandas会优先匹配传入数据源的现有列名,你指定的['MIN', 'MAX', 'RANGE', 'MEAN', 'MED']和原有列名0-4完全不匹配,Pandas就会生成所有列均为NaN的空DataFrame。
正确解决方法
有两种简单的修改方案,都不需要重复调用pd.DataFrame:
方案1:concat时直接指定列名
在concat环节通过keys参数直接设置列名,一步完成:
MIN = df.min(axis=0, numeric_only=True) MAX = df.max(axis=0, numeric_only=True) RANGE = MAX-MIN MEAN = df.mean(axis=0, numeric_only=True) MED = df.median(axis=0, numeric_only=True) sum_stats = pd.concat([MIN, MAX, RANGE, MEAN, MED], axis=1, keys=['MIN', 'MAX', 'RANGE', 'MEAN', 'MED']) sum_stats
方案2:直接修改现有DataFrame的列属性
如果已经完成concat操作,直接修改columns属性即可:
sum_stats = pd.concat([MIN, MAX, RANGE, MEAN, MED], axis=1) sum_stats.columns = ['MIN', 'MAX', 'RANGE', 'MEAN', 'MED'] sum_stats
内容的提问来源于stack exchange,提问作者Yehudis Bensinger
相关产品推荐
相关产品推荐

