所以我有一个数据库,其中包含几年的站点数据。我现在正尝试使用该数据进行分析——按关键字绘制和排序广告费用等。
从数据库中获取的数据之一需要几分钟才能完成。虽然我可以花一些时间优化我用来获取数据的 SQL 语句,但我更愿意简单地离开那个类,它只是 SQL,抓取数据,并将结果保存到数据文件中,以便以后更快地检索。大多数数据库数据都不会改变,所以我可以编写一个单独的 python 脚本来每 24 小时更新一次文件,然后将该文件用于这个长时间运行的任务。
数据作为 numpy 数组的字典返回。当我使用 numpy.save('data', data)
文件保存得很好。当我使用 data2 = numpy.load('data.npy')
它加载文件时没有错误。但是,输出 data2
不等于原来的 data
。
特别是行 data == data2
返回 false。此外,如果我使用以下内容:
for key, key_data in data.items():
print key
有用。但是,当我将 data.items()
替换为 data2.items()
时,出现错误:
AttributeError: 'numpy.ndarray' object has no attribute 'items'
使用 type(data)
我得到 dict
。使用 type(data2)
我得到 numpy.ndarray
。
那么我该如何解决呢?我希望加载的数据等于我传入的用于保存的数据。是否有 numpy.save 的参数来解决这个问题,或者我是否需要某种形式的简单重新格式化函数来将加载的数据重新格式化为正确的结构?
尝试通过 for 循环或索引进入 ndarray
都会导致有关索引 0-d 数组的错误。像这样投射 dict(data2)
也无法迭代 0-d 数组。然而,Spyder 显示数组的值,它包括我保存的数据。我只是不知道如何去做。
如果我需要重新格式化加载的数据,我会很感激一些关于如何做到这一点的示例代码。
原文由 Gabe Spradlin 发布,翻译遵循 CC BY-SA 4.0 许可协议
让我们看一个小例子:
np.save
用于保存numpy数组。data
是一本字典。所以它将它包装在一个对象数组中,并使用pickle
来保存该对象。您的data2
可能具有相同的字符。您可以通过以下方式获得数组: