python - 创建一个 numpy 数组,其中包含 .npz 输入文件的数组列表
问题描述
我正在分析属于 5 个不同年龄组的 5 个不同成员的食品支出。我想创建一个 .npz 格式的文件,它应该有两个变量,即“年龄”和“人”。我正在尝试获取一个包含数组列表的数组。
我创建了一个包含 5 个成员“人”的列表和一个包含 5 个相应年龄组的列表作为“年龄”。但是,在访问创建的 .npz 文件后,我得到了一个大小为 (5,7) 的组合数组。
person1 = np.array([(1, 2, 3, 4),
(4, 5, 6, 5),
(7, 8, 9, 6),
(9, 6, 5, 4),
(6, 5, 4, 3),
(6, 5, 4, 3),
(4, 3, 5, 7)],
dtype=[('BF', '<f8'), ('Lunch', '<f8'), ('Snacks', '<f8'), ('Dinner', '<f8')])
person2 = person1
person3 = person1
person4 = person1
person5 = person1
person = [person1, person2, person3, person4, person5]
age = [10, 20, 30, 40, 50]
np.savez('test.npz', age=age, person=person)
with np.load('test.npz', allow_pickle=False) as data:
list_person = data['person']
age_group = data['age']
# df = pd.DataFrame(list_person)
# df.to_excel('test.xlsx', index=True)
我期待 'list_person' 作为一个大小为 (5,) 的数组。其中的每个元素都应该有一个形状数组 (7,4)。因此,在导出 excel 时,我得到 (5,1) 数据。
解决方案
savez
制作所有列表输入的数组;所以这就是你会看到的load
:
In [105]: np.array(person).shape
Out[105]: (5, 7)
In [106]: np.array(person).dtype
Out[106]: dtype([('BF', '<f8'), ('Lunch', '<f8'), ('Snacks', '<f8'), ('Dinner', '<f8')])
In [107]: np.array(age).shape
Out[107]: (5,)
In [108]: np.array(age).dtype
Out[108]: dtype('int64')
person
由 5 个副本构成person1
,因此结果为 (5,7),并且dtype
有 4 个字段(这些不是维度)。
In [112]: df = pd.DataFrame(person1)
In [113]: df
Out[113]:
BF Lunch Snacks Dinner
0 1.0 2.0 3.0 4.0
1 4.0 5.0 6.0 5.0
2 7.0 8.0 9.0 6.0
3 9.0 6.0 5.0 4.0
4 6.0 5.0 4.0 3.0
5 6.0 5.0 4.0 3.0
6 4.0 3.0 5.0 7.0
尝试从 (5,7) 数组创建数据框会产生错误。将其展平到 (35,) 确实有效。
推荐阅读
- javascript - 我将如何通过 php get 请求实现分页
- oauth - 如何解决 Netsuite Restlets 中的 400 bad request 错误?
- jmeter - Jmeter 与 UI 和数据库的交互同时插入
- android - 如何在反应原生中使用高程在android中插入盒子阴影?
- angular - ng-packagr 无法将 Angular 包发布到 npm 或如何修复 Angular Valunerablities
- javascript - 破碎的 apexcharts 图例(vue-apexcharts)
- asp.net - Azure Redis - 当模式=自定义时如何在 ASP.NET 应用程序中模拟 session_end 事件?
- c# - 我怎样才能把这个 onpaint 方法放在点击功能上?C#
- c# - 我可以为“valuetype”的 getter 和 setter 设置不同的返回类型吗?特性?
- .net-framework-version - 如何解决dotNet framework 3.5安装错误0x80080005?