当我进行数据分析练习时,此代码在Python3中没有按预期运行。
typeerror是“TypeError:/ dict_values'和'int'”不支持的操作数类型。
我该如何解决?
Option Explicit
Sub Extract5Digits()
Dim R As Range, C As Range
Dim RE As Object, MC As Object, M As Object
Dim I As Long
Set R = Selection
Set RE = CreateObject("vbscript.regexp")
With RE
.Global = True
.Pattern = "\b\d{5}\b"
For Each C In R
If .test(C.Text) = True Then
I = 0
Set MC = .Execute(C.Text)
For Each M In MC
I = I + 1
C.Offset(0, I) = M
Next M
End If
Next C
End With
End Sub
答案 0 :(得分:14)
在完成本课程时,此代码给我带来了一些意想不到的麻烦,但我通过进行以下更改来实现它:
import numpy as np
total_minutes = list(total_minutes_by_account.values())
print ('Mean:', np.mean(total_minutes))
print ('Standard Deviation:', np.std(total_minutes))
print ('Minimum:', np.min(total_minutes))
print ('Maximum:', np.max(total_minutes))
答案 1 :(得分:6)
希望这会有所帮助:
该类是用Python 2编写的,其中Dict.values()
返回一个列表,但是在Python 3中更新了它以返回字典视图,如下所述:
https://docs.python.org/3/library/stdtypes.html#dict-views
这是一个潜在有用的更改,因为视图会在字典内容更新时更新,但它们的行为不像List
,而是numpy的mean
,std
,{ {1}}和min
都以列表作为参数。
答案 2 :(得分:1)
total_minutes = total_minutes_by_account.values()
变量total_minutes
的类型为dict_values
。
要将其转换为列表,您需要将其包装在list
函数中,如下所示:
total_minutes = list(total_minutes_by_account.values())
答案 3 :(得分:0)
@hpaulj在(not being able to do numpy operations on values on a dictionary)
给出了一个很好的例子在下面找到他的答案摘要。这对我帮助很大。
In [1618]: dd = {'a':[1,2,3], 'b':[4,5,6]}
In [1619]: dd
Out[1619]: {'a': [1, 2, 3], 'b': [4, 5, 6]}
In [1620]: dd.values()
Out[1620]: dict_values([[1, 2, 3], [4, 5, 6]])
In [1621]: np.mean(dd.values())
...
TypeError: unsupported operand type(s) for /: 'dict_values' and 'int'
解决方案:将dict_values转换为list:
In [1623]: list(dd.values())
Out[1623]: [[1, 2, 3], [4, 5, 6]]
In [1624]: np.mean(list(dd.values()))
Out[1624]: 3.5
在Py3中,range和dict.keys()需要额外的触摸。
======
np.mean首先尝试将输入转换为数组,但value()不是我们想要的。它生成一个包含整个对象的单项对象数组。
In [1626]: np.array(dd.values())
Out[1626]: array(dict_values([[1, 2, 3], [4, 5, 6]]), dtype=object)
In [1627]: _.shape
Out[1627]: ()
In [1628]: np.array(list(dd.values()))
Out[1628]:
array([[1, 2, 3],
[4, 5, 6]])