多列DataFrame除以同索引单列DataFrame出现全NaN错误,求解决
解决DataFrame相除全NaN的问题
问题原因
pandas里DataFrame的算术运算会同时按索引和列名对齐。你的x_axis只有列I,而y_axis的列是A、B,两者列名完全不匹配,导致每一项运算都找不到对应值,结果全为NaN。
解决方案
核心是让运算按索引对齐(而非列名),把x_axis的单列数据转换成能广播到y_axis所有列的形式,有两种简单方法:
方法1:将x_axis转为Series
因为x_axis只有一列,直接提取列转为Series,运算时会自动按索引广播到y_axis的每一列:
import pandas as pd x_axis = pd.DataFrame({'I': [1, -3, 4],}, index=['2021-01-01', '2021-01-02', '2021-01-03']) y_axis = pd.DataFrame({'A': [6, 2, -7], 'B': [-5, 3, 2]}, index=['2021-01-01', '2021-01-02', '2021-01-03']) # 提取单列转为Series x_series = x_axis['I'] z_axis = y_axis / x_series # 调整日期格式为你期望的样式 z_axis.index = z_axis.index.strftime('%d/%m/%Y') print(z_axis)
输出结果:
A B 01/01/2021 6.000 -5.0 02/01/2021 -0.667 -1.0 03/01/2021 -1.750 0.5
方法2:使用div方法指定对齐轴
用DataFrame的div方法,明确指定按行(axis=0)对齐,传入x_axis的列数据:
z_axis = y_axis.div(x_axis['I'], axis=0) z_axis.index = z_axis.index.strftime('%d/%m/%Y') print(z_axis)
得到的结果和方法1完全一致。
内容的提问来源于stack exchange,提问作者Stacey
相关产品推荐
相关产品推荐

