将2D numpy数组的Pandas系列转换为一维numpy数组的列的Pandas DataFrame

时间:2018-12-03 22:56:09

标签: python arrays pandas numpy dataframe

第一个发布到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个数组,因此我试图避免对行进行迭代。

什么是有效的方法?

3 个答案:

答案 0 :(得分:3)

使用np.stackmap的解决方案

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>