如何解决将 4D 数组 numpy 转换为 Pandas
我想转换我的 numpy 数组( shape=(27,77,77) ):
[[1.,1.,...,1.],[1.,2.,2.],2.]],[[1.,0.],1.]])
进入一个带有列'x' = 索引2(右)、'y' = 索引1(向下)、'z' = 索引0(27 个“不同”数组)和'v' = 值的pandas 数据框在里面。 df.columns=['x','y','z','v']
我对 python 比较陌生,你知道我应该如何编码吗?
谢谢!
解决方法
这是一种原始的方式。
import numpy as np
import pandas as pd
data = np.ones( (27,77,77) )
rows = []
for i,plane in enumerate(data):
for j,row in enumerate(plane):
for k,col in enumerate(row):
rows.append( [k,j,i,col] )
df = pd.DataFrame( rows,columns=['x','y','z','val'])
print(df)
输出:
C:\tmp>python x.py
x y z val
0 0 0 0 1.0
1 1 0 0 1.0
2 2 0 0 1.0
3 3 0 0 1.0
4 4 0 0 1.0
... .. .. .. ...
160078 72 76 26 1.0
160079 73 76 26 1.0
160080 74 76 26 1.0
160081 75 76 26 1.0
160082 76 76 26 1.0
[160083 rows x 4 columns]
C:\tmp>
,
作为任意数量维度的“简单”单行:
>>> import itertools as it; import numpy as np; import pandas as pd
# analogous test data
>>> arr = np.random.rand(27,77)
# np.nditer(arr) + v.item() using no additional memory
# arr.flatten() is slightly faster but uses additional memory
>>> df = pd.DataFrame(data=[(*axes,v.item()) for axes,v in zip(it.product(*[range(i) for i in arr.shape]),np.nditer(arr))],columns=tuple('xyzv'))
>>> df
x y z v
0 0 0 0 0.375027
1 0 0 1 0.511405
2 0 0 2 0.645937
3 0 0 3 0.229538
4 0 0 4 0.274867
... .. .. .. ...
160078 26 76 72 0.404251
160079 26 76 73 0.010852
160080 26 76 74 0.048079
160081 26 76 75 0.426528
160082 26 76 76 0.723565
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。