熊猫astype python bool而不是numpy.bool_

时间:2019-02-13 13:15:51

标签: python pandas python-2.7 numpy

我需要将熊猫数据框转换为JSON对象。

但是

json.dumps(df.to_dict(orient='records'))

失败,因为布尔列不可序列化,因为它们的类型为numpy.bool_。现在,我尝试了df['boolCol'] = df['boolCol'].astype(bool),但仍然将字段类型保留为numpy.bool_,而不是将序列号转换为JSON的pyhton bool。

关于如何在不遍历每条记录并对其进行转换的情况下转换列的任何建议?

谢谢

编辑:

这是对各种内容的数据帧进行整体清理的一部分,因此它们可以用作API的JSON有效负载。因此,我们目前有这样的东西:

for cols in df.columns:
    if type(df[cols][0]) == pd._libs.tslibs.timestamps.Timestamp:
        df[cols] = df[cols].astype(str)
    elif type(df[cols]) == numpy.bool_:
        df[cols] = df[cols].astype(bool) #still numnpy bool afterwards!

1 个答案:

答案 0 :(得分:0)

只需对其进行测试,该问题似乎是由orient ='records'参数引起的。似乎您必须将其设置为选项(例如列表),然后将结果转换为首选格式。

import numpy as np
import pandas as pd
column_name = 'bool_col'

bool_df = pd.DataFrame(np.array([True, False, True]), columns=[column_name])

list_repres = bool_df.to_dict('list')
record_repres = [{column_name: values} for values in list_repres[column_name]]

json.dumps(record_repres)