阵列的熊猫数据框到矩阵

时间:2020-01-24 08:50:55

标签: python arrays pandas numpy dataframe

我正在尝试将包含数组的熊猫数据框转换为矩阵,并正在寻找实现这一目标的最佳方法。 可以说我有这个数据框,我想将两行切成两行,以形成大小为2x2的矩阵。

import pandas as pd
import numpy as np

df = pd.DataFrame({'a':[[1,2], [3,4], [5,6]]})
df['a'] = df['a'].map(np.array)

以下Attemts生成一个对象的numpy数组,从而生成大小为2的数组:

df.loc[0:1,'a'].to_numpy().shape   # (2,)
df.loc[0:1,'a'].values.shape       # (2,)
np.array(df.loc[0:1,'a'].values).shape   # (2,)
np.array(df.loc[0:1,'a']).shape    # (2,)

这是我找到的最接近的解决方案,但是它增加了一个额外的维度,我不明白为什么这可行,但上面的解决方案却不可行。

np.array([df.loc[0:1,'a']]).shape  #( 1,2,2)

是否存在一种解决方案,可以直接将其转换为形状[2,2],而无需循环或删除多余的尺寸?

3 个答案:

答案 0 :(得分:2)

将值转换为嵌套列表,然后转换为array

a = np.array(df.loc[0:1,'a'].tolist())
print (a)
[[1 2]
 [3 4]]

print (a.shape)
(2, 2)

df2 = pd.DataFrame({'a':[[1,2], [3,4], [5,6]],'b':[[1,2], [3,4], [5,6]] })
print (df2)
        a       b
0  [1, 2]  [1, 2]
1  [3, 4]  [3, 4]
2  [5, 6]  [5, 6]

b = np.array(df2.loc[0:1,'a':'b'].values.tolist())
print (b)
[[[1 2]
  [1 2]]

 [[3 4]
  [3 4]]]

print (b.shape)
(2, 2, 2)

答案 1 :(得分:1)

这似乎生成所需的(2,2)数组。我还添加了带有两列的df2,可以根据您的评论将其重塑为2x2x2数组。但是我的解决方案感觉像是黑客。我相信它可以改善。

import pandas as pd
import numpy as np

df = pd.DataFrame({'a':[[1,2], [3,4], [5,6]]})
df['a'] = df['a'].map(np.array)
np.concatenate(df.loc[0:1,'a'],axis = 0).reshape(2,-1).shape

df2 = pd.DataFrame({'a':[[1,2], [3,4], [5,6]],'b':[[1,2], [3,4], [5,6]] })
np.array(df2.loc[0:1,'a':'b'].applymap(np.array)
         .apply(np.concatenate, axis = 0)).reshape(2,2,-1).shape

答案 2 :(得分:0)

我对@jezrael发布的答案做了一些修改 我希望这对您有用。

假设您的数据框是这个

df = pd.DataFrame({'a':[[1,2], [3,4], [5,6]],'b':[[11,2], [6,9], [5,6]]})

对两列都这样做

a = np.array(df.loc[0:1,'a'].tolist()) b = np.array(df.loc[0:1,'b'].tolist())

然后连接两个数组

np.concatenate((a, b), axis=1).reshape(-1,2,2).shape