第一个发布到stackoverflow的帖子。我搜索了一个找不到答案的答案。
我有一个2D numpy数组的熊猫系列:
import numpy as np
import pandas as pd
x1 = np.array([[0,1],[2,3],[3,4]],dtype=np.uint8)
x2 = np.array([[5,6],[7,8],[9,10]],dtype=np.uint8)
S = pd.Series(data=[x1,x2],index=['a','b'])
输出S应该看起来像:
a [[0, 1], [2, 3], [3, 4]]
b [[5, 6], [7, 8], [9, 10]]
我希望将其转换为Pandas DataFrame D,其中S中的2D numpy数组的每一列都成为D列中的1D numpy数组:
D应该看起来像:
0 1
a [0,2,3] [1,3,4]
b [5,7,9] [6,8,10]
请注意,我的实际数据集是大小为(32,8)的1238500个数组,因此我试图避免对行进行迭代。
什么是有效的方法?
答案 0 :(得分:3)
使用np.stack
和map
的解决方案
df = pd.DataFrame(np.stack(map(np.transpose, S)).tolist(), index=S.index)
print (df)
0 1
a [0, 2, 3] [1, 3, 4]
b [5, 7, 9] [6, 8, 10]
答案 1 :(得分:1)
您可以拆分和压缩,而无需将最后一个维度转换为python列表。
df = S.apply(np.split, args=[2, 1]).apply(pd.Series).applymap(np.squeeze)
# 0 1
# a [0, 2, 3] [1, 3, 4]
# b [5, 7, 9] [6, 8, 10]
在args=[2, 1]
中,2
代表列数,1
代表要横切的轴。
类型:
In [280]: df.applymap(type)
Out[280]:
0 1
a <class 'numpy.ndarray'> <class 'numpy.ndarray'>
b <class 'numpy.ndarray'> <class 'numpy.ndarray'>
答案 2 :(得分:0)
我会这样:
<html>
<head>
....
</head>
<body>
<div class="content">
<!-- Here is a form what help user to search some table from DB -->
<?php include_once "search\search_form.php" ?>
<!-- This div is the place where will be print the table -->
<div class='right-side'>
<footer>
....
</footer>
<!-- Here I print the searched table from DB -->
<table>
.....
</table>
</div>
</div>
</body>
</html>