我正在尝试将包含数组的熊猫数据框转换为矩阵,并正在寻找实现这一目标的最佳方法。 可以说我有这个数据框,我想将两行切成两行,以形成大小为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],而无需循环或删除多余的尺寸?
答案 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