Python实现把多维数组展开成DataFrame
作者:lyghe 发布时间:2021-06-17 09:08:28
标签:Python,多维数组,DataFrame
如下所示:
import numpy as np
import pandas as pd
################# 准备数据 #################
a1 = np.arange(1,101)
a3 = a1.reshape((2,5,10))
a3
'''
array([[[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
[ 11, 12, 13, 14, 15, 16, 17, 18, 19, 20],
[ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30],
[ 31, 32, 33, 34, 35, 36, 37, 38, 39, 40],
[ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50]],
[[ 51, 52, 53, 54, 55, 56, 57, 58, 59, 60],
[ 61, 62, 63, 64, 65, 66, 67, 68, 69, 70],
[ 71, 72, 73, 74, 75, 76, 77, 78, 79, 80],
[ 81, 82, 83, 84, 85, 86, 87, 88, 89, 90],
[ 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]]])
'''
################# 准备标签 #################
# 第 1 维的标签
index1 = pd.Series(np.arange(1,11))
index1 = index1.astype(str)
index1 = 'A'+index1
index1
'''
0 A1
1 A2
2 A3
3 A4
4 A5
5 A6
6 A7
7 A8
8 A9
9 A10
'''
# 第 2 维的标签
index2 = pd.Series(np.arange(1,6))
index2 = index2.astype(str)
index2 = 'B'+index2
index2
'''
0 B1
1 B2
2 B3
3 B4
4 B5
'''
# 第 3 维的标签
index3 = pd.Series(np.arange(1,3))
index3 = index3.astype(str)
index3 = 'C'+index3
index3
'''
0 C1
1 C2
'''
################# 展开数据 #################
# 把三维数组展开
value = a3.flatten()
value = pd.Series(value)
value.name = 'value'
value
'''
0 1
1 2
2 3
...
97 98
98 99
99 100
Name: value, Length: 100, dtype: int64
'''
################# 展开标签 #################
import itertools
# index的笛卡尔乘积。注意:高维在前,低维在后
prod = itertools.product(index3, index2, index1 )
# 转换为DataFrame
prod = pd.DataFrame([x for x in prod])
prod.columns = ['C', 'B', 'A']
prod.T
'''
0 1 2 3 4 5 6 7 8 9 ... 90 91 92 93 94 95 96 \
C C1 C1 C1 C1 C1 C1 C1 C1 C1 C1 ... C2 C2 C2 C2 C2 C2 C2
B B1 B1 B1 B1 B1 B1 B1 B1 B1 B1 ... B5 B5 B5 B5 B5 B5 B5
A A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 ... A1 A2 A3 A4 A5 A6 A7
97 98 99
C C2 C2 C2
B B5 B5 B5
A A8 A9 A10
[3 rows x 100 columns]
'''
################# 最终数据 #################
# 合并成一个DataFrame
pd.concat([prod, value], axis=1)
'''
C B A value
0 C1 B1 A1 1
1 C1 B1 A2 2
2 C1 B1 A3 3
3 C1 B1 A4 4
4 C1 B1 A5 5
5 C1 B1 A6 6
6 C1 B1 A7 7
7 C1 B1 A8 8
8 C1 B1 A9 9
9 C1 B1 A10 10
10 C1 B2 A1 11
11 C1 B2 A2 12
12 C1 B2 A3 13
13 C1 B2 A4 14
14 C1 B2 A5 15
15 C1 B2 A6 16
16 C1 B2 A7 17
17 C1 B2 A8 18
18 C1 B2 A9 19
19 C1 B2 A10 20
20 C1 B3 A1 21
21 C1 B3 A2 22
22 C1 B3 A3 23
23 C1 B3 A4 24
24 C1 B3 A5 25
25 C1 B3 A6 26
26 C1 B3 A7 27
27 C1 B3 A8 28
28 C1 B3 A9 29
29 C1 B3 A10 30
.. .. .. ... ...
70 C2 B3 A1 71
71 C2 B3 A2 72
72 C2 B3 A3 73
73 C2 B3 A4 74
74 C2 B3 A5 75
75 C2 B3 A6 76
76 C2 B3 A7 77
77 C2 B3 A8 78
78 C2 B3 A9 79
79 C2 B3 A10 80
80 C2 B4 A1 81
81 C2 B4 A2 82
82 C2 B4 A3 83
83 C2 B4 A4 84
84 C2 B4 A5 85
85 C2 B4 A6 86
86 C2 B4 A7 87
87 C2 B4 A8 88
88 C2 B4 A9 89
89 C2 B4 A10 90
90 C2 B5 A1 91
91 C2 B5 A2 92
92 C2 B5 A3 93
93 C2 B5 A4 94
94 C2 B5 A5 95
95 C2 B5 A6 96
96 C2 B5 A7 97
97 C2 B5 A8 98
98 C2 B5 A9 99
99 C2 B5 A10 100
[100 rows x 4 columns]
'''
来源:https://blog.csdn.net/lyghe/article/details/80827743
0
投稿
猜你喜欢
- 前言大家好!这个系列文章是W3CN 阿捷编写的。是一些制作过程中的心得和经验,希望对大家有点帮助。第一天开始制作符合标准的站点,第一件事情就
- 今天我们来介绍下Python基础教程学习之iter() 方法另外的用法。据说很少有人知道这个用法!一、上代码、学用法我们都比较熟悉 iter
- 网络爬虫由于一个ip频繁访问同一网站,容易返回456或者被长时间封禁。特别的本机有socks5客户端的设置如下,前提是已经安装了socks5
- plt.imshow(image)无法显示图片的解决使用plt.imshow()发现不能显示图片,加了plt.show()也还是不能显示先引
- 很多书籍里面讲的Python备份都是在linux下的,而在xp上测试一下也可以执行备份功能,代码都差不多相同,就是到执行打包的时候是不一样的
- 用 docx 模块读取 Worddocx 安装cmd 中输入pip install python-docx 即可安装 docx 模块docx
- 论坛经常有人会问到用CSS如何美化Select标签,其实但凡你看到很酷的都是用javascript来实现的。昨天试着做了一下,基本实现的初级
- 本文为大家分享了pygame游戏之旅的第3篇,供大家参考,具体内容如下载入car图片(我自己画的),需要用到pygame.image模块,定
- 说明1、需要一个函数来处理的参数数是不确定的,这时可以使用多值参数。2、python有两个多值参数,在参数名前增加一个*可以接收元组。在参数
- 当很多人发现在DW4中定义CSS很方便的时候,开始报怨FP2000不能定义CSS,甚至就此抨击FP2000如何的不好。事实上,在FP2000
- 可视化对于大家来说确实是有关的,因为确实是直观的,每一组大数据如果可以用可视化进行展示的话可以让大家豁然开朗。但在另外一些场景中,辅之以少量
- Log包Go语言提供的默认日志包:https://golang.org/pkg/log/基本用法log包定义了Logger类型,该类型提供了
- 问题描述有些小伙伴在使用python做GUI界面的时候可能想添加这么一个小功能,就是在界面的某个角落动态的显示当前的时间,本文将介绍具体方法
- 6月初,Python之父Guido van Rossum在今天的PyCon US大会上作了名为“Python Language”的演讲。近日
- 本文实例讲述了Python实现的求解最小公倍数算法。分享给大家供大家参考,具体如下:简单分析了一下,前面介绍的最大公约数的求解方法跟最小公倍
- 假如你拥有一个庞大的网站,内容又多,那么来访者往往很难找到自己所需要的东东,这时候你就需要一个站内搜索来帮助来访者更快的找到索要的资料了!现
- 系列文章:PyQt5使用mimeData实现拖拽事件教程示例解析上实现思路1、简要介绍QMimeData2、QMimeData的用例1:在Q
- 本文实例讲述了Python抓取某只基金历史净值数据。分享给大家供大家参考,具体如下:http://fund.eastmoney.com/f1
- 需求:(1) 获取你对象chrome前一天的浏览记录中的所有网址(url)和访问时间,并存在一个txt文件中(2)将这个txt文件发送给指定
- 看到了很多关于如何读出图片的长度的高度的方法,其实都不实用,大多都是通过图片的大小来判断的,图片的种类众多,通过大小来判断难免要制造很多的代