将numpy类型转换为python

我有从熊猫生成的以下形式的字典列表。我想将其转换为json格式。

list_val = [{1.0: 685}, {2.0: 8}]

output = json.dumps(list_val)

但是,json.dumps会引发错误:TypeError:685不可序列化JSON

我猜这是从numpy到python(?)的类型转换问题。

但是,当我使用np.int32(v)转换数组中每个字典的值v时,仍会引发错误。

编辑:这是完整的代码

            new = df[df[label] == label_new] 

ks_dict = json.loads(content)

ks_list = ks_dict['variables']

freq_counts = []

for ks_var in ks_list:

freq_var = dict()

freq_var["name"] = ks_var["name"]

ks_series = new[ks_var["name"]]

temp_df = ks_series.value_counts().to_dict()

freq_var["new"] = [{u: np.int32(v)} for (u, v) in temp_df.iteritems()]

freq_counts.append(freq_var)

out = json.dumps(freq_counts)

回答:

看来您是正确的:

>>> import numpy

>>> import json

>>> json.dumps(numpy.int32(685))

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

File "/usr/lib/python2.7/json/__init__.py", line 243, in dumps

return _default_encoder.encode(obj)

File "/usr/lib/python2.7/json/encoder.py", line 207, in encode

chunks = self.iterencode(o, _one_shot=True)

File "/usr/lib/python2.7/json/encoder.py", line 270, in iterencode

return _iterencode(o, 0)

File "/usr/lib/python2.7/json/encoder.py", line 184, in default

raise TypeError(repr(o) + " is not JSON serializable")

TypeError: 685 is not JSON serializable

这里的可惜的是,numpy的数字__repr__不给你什么任何暗示 键入 他们。int当它们不是( 喘气

)时,它们到处伪装。最终,它似乎json告诉您a

int不可序列化,但实际上,它告诉您此特定的np.int32(或您实际拥有的任何类型)不可序列化。(没有真正的惊喜-没有np.int32

序列化)。这也是为什么您 将其传递给json.dumps之前 不可避免地打印出来的字典看起来也只有整数的原因。

这里最简单的解决方法可能是编写自己的序列化器1:

class MyEncoder(json.JSONEncoder):

def default(self, obj):

if isinstance(obj, numpy.integer):

return int(obj)

elif isinstance(obj, numpy.floating):

return float(obj)

elif isinstance(obj, numpy.ndarray):

return obj.tolist()

else:

return super(MyEncoder, self).default(obj)

您可以这样使用它:

json.dumps(numpy.float32(1.2), cls=MyEncoder)

json.dumps(numpy.arange(12), cls=MyEncoder)

json.dumps({'a': numpy.int32(42)}, cls=MyEncoder)

等等

1或者,您也可以编写默认函数并将其作为defaut关键字参数传递给json.dumps。在这种情况下,您将用替换最后一行raise

TypeError,但是…嗯。该类更可扩展:-)

以上是 将numpy类型转换为python 的全部内容, 来源链接: utcz.com/qa/407291.html

回到顶部