比较熊猫数据帧中的 float32 对象时出现问题



我有一个数据帧数据,如下所示:

>>> data.head(10)
              stock   pop    ma  order
Date
2016-01-04  325.316  82.0   NaN     -1
2016-01-11  320.036  83.0   NaN     -1
2016-01-18  299.169  79.0  82.5     -1
2016-01-25  296.579  84.0  81.0     -1
2016-02-01  295.334  82.0  81.5     -1
2016-02-08  309.777  81.0  83.0     -1
2016-02-15  317.397  75.0  81.5     -1
2016-02-22  328.005  80.0  78.0     -1
2016-02-29  315.504  81.0  77.5     -1
2016-03-07  328.802  81.0  80.5     -1

所以我想比较 data.po 和 data.ma.如果 po 大于 ma,那么顺序将是 -1,如果 po 小于 ma,那么它是 1。我为它编写了以下代码。

data['order'][data.pop > data.ma] = -1
data['order'][data.pop < data.ma] = 1

在我运行大于 po 的 ma 后,订单值没有变化。正如表中所示,当我运行大于 ma 代码的 pop 时,一切都变成了 -1。最初,我认为一定是数据类型的错误,所以我确保两者都相同并将它们转换为 float32。即使在那之后它也没有运行。

>>> data.dtypes
stock    float64
pop      float32
ma       float32
order      int64
dtype: object

任何可能出错的建议将不胜感激。

首先,您遇到了链式索引 - 以交互方式运行此索引,您将看到警告,另请参阅此处的文档。

其次,pop是一个数据帧方法,因此data.pop实际上返回的是该方法,而不是列名。 访问该列的安全方法是 data['pop']

所以你可以这样写:

data.loc[data['pop'] > data['ma'], 'order'] = -1
data.loc[data['pop'] < data['ma'], 'order'] = 1
data
              stock   pop    ma  order
Date                                  
2016-01-04  325.316  82.0   NaN     -1
2016-01-11  320.036  83.0   NaN     -1
2016-01-18  299.169  79.0  82.5      1
2016-01-25  296.579  84.0  81.0     -1
2016-02-01  295.334  82.0  81.5     -1
2016-02-08  309.777  81.0  83.0      1
2016-02-15  317.397  75.0  81.5      1
2016-02-22  328.005  80.0  78.0     -1
2016-02-29  315.504  81.0  77.5     -1
2016-03-07  328.802  81.0  80.5     -1

相关内容

  • 没有找到相关文章

最新更新