【问题标题】:Cannot cast array data from dtype('O') to dtype('float64') according to the rule 'safe'无法根据规则“安全”将数组数据从 dtype('O') 转换为 dtype('float64')
【发布时间】:2019-02-26 04:20:23
【问题描述】:

运行我的 Tukey 测试时,它给了我这个错误:

无法根据 dtype('O') 将数组数据转换为 dtype('float64') 遵守“安全”规则

我的数据框头输出:

    Group    Score
3   A        1.91
4   B        1.7
5   C        1.69
6   D        1.68
7   E        1.49

我的 Tukey 测试代码:

from statsmodels.stats.multicomp import pairwise_tukeyhsd
from statsmodels.stats.multicomp import MultiComparison

mc = MultiComparison(df['Score'], df['Group'])
result = mc.tukeyhsd()

print(result)
print(mc.groupsunique)


> TypeError Traceback (most recent call
> last) <ipython-input-10-705a07612b72> in <module>()
>       1 mc = MultiComparison(df['Score'], df['Group'])
> ----> 2 result = mc.tukeyhsd()
>       3 
>       4 print(result)
>       5 print(mc.groupsunique)
> 
> /usr/local/lib/python3.6/dist-packages/statsmodels/sandbox/stats/multicomp.py
> in tukeyhsd(self, alpha)
>     964         self.groupstats = GroupsStats(
>     965                             np.column_stack([self.data, self.groupintlab]),
> --> 966                             useranks=False)
>     967 
>     968         gmeans = self.groupstats.groupmean
> 
> /usr/local/lib/python3.6/dist-packages/statsmodels/sandbox/stats/multicomp.py
> in __init__(self, x, useranks, uni, intlab)
>     535 
>     536         #temporary until separated and made all lazy
> --> 537         self.runbasic(useranks=useranks)
>     538 
>     539 
> 
> /usr/local/lib/python3.6/dist-packages/statsmodels/sandbox/stats/multicomp.py
> in runbasic(self, useranks)
>     569         else:
>     570             self.xx = x[:,0]
> --> 571         self.groupsum = groupranksum = np.bincount(self.intlab, weights=self.xx)
>     572         #print('groupranksum', groupranksum, groupranksum.shape, self.groupnobs.shape
>     573         # start at 1 for stats.rankdata :
> 
> TypeError: Cannot cast array data from dtype('O') to dtype('float64')
> according to the rule 'safe'

有人知道这是什么意思吗?

【问题讨论】:

  • Score 有空值吗?
  • 顺便说一句,我从标题中编辑了 Tukey 测试,希望它能给你更多的关注这个问题。这个问题不仅限于那个问题。
  • @roganjosh 没有空值。还能是什么?我尝试了很长时间来解决这个问题,但没有任何效果。
  • python 回溯信息丰富。您需要至少显示最后几行以查看异常发生的位置。您的 score 或 groups 列是当前 tukeyhsd 代码无法处理的对象数组。
  • @Josef。是的,我很抱歉没有添加该信息。我刚刚编辑了主帖,现在应该可以看到了。你能重新评估一下吗?此外,我所有的 df 类型都是对象。我不确定这是否是问题的一部分?

标签: python python-3.x statistics statsmodels


【解决方案1】:

换行试试

mc = MultiComparison(df['Score'], df['Group'])

mc = MultiComparison(df['Score'].astype('float'), df['Group'])

如果您在此处获得失败,则可能存在有问题的行。您可以改用以下方法解决此问题:

mc = MultiComparison(pd.to_numeric(df['Score'], errors='coerce'), df['Group'])

【讨论】:

  • 完美。 mc = MultiComparison(df['Score'].astype('float'), df['Group']) 很神奇。谢谢!
猜你喜欢
  • 2021-01-26
  • 1970-01-01
  • 2018-08-15
  • 1970-01-01
  • 2019-03-11
  • 2020-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多