为何Pandas中两个DataFrame相减得到含NaN的两列结果?
问题原因
Pandas的DataFrame执行算术运算(如-)时,会同时按列名和索引进行对齐匹配。你的x1列名为Test,x2列名为Test2,二者没有重叠的列名,运算时找不到可对应计算的列,因此结果中所有位置都会返回NaN。
解决方法
有几种实用的处理方式:
统一两个DataFrame的列名
将x2的列名修改为与x1一致,让列名匹配后再运算:import pandas as pd import numpy as np x1 = pd.DataFrame(np.random.randn(100), columns=['Test'], index=pd.date_range(start='1/1/2018', periods=100)) x2 = pd.DataFrame(np.random.randn(100), columns=['Test'], index=pd.date_range(start='1/1/2018', periods=100)) z = x1 - x2直接提取数值数组计算
若确认两个DataFrame的索引完全对齐,可跳过列名匹配,直接用底层数值数组运算:# 方式1:直接用values运算 z = x1 - x2.values # 方式2:单独提取列数值后构建新DataFrame z = pd.DataFrame(x1['Test'].values - x2['Test2'].values, index=x1.index, columns=['Diff'])使用
sub方法指定对齐轴
通过axis参数强制按索引(行)对齐,忽略列名差异:z = x1.sub(x2, axis=0)
内容的提问来源于stack exchange,提问作者jacques
相关产品推荐
相关产品推荐

