python - 将 pandas 系列和数据框对象转换为 numpy 数组
问题描述
系列到 Numpy 数组:
我有一个pandas
如下所示的系列对象:
s1 = pd.Series([0,1,2,3,4,5,6,7,8], index=['AB', 'AC','AD', 'BA','BB','BC','CA','CB','CC'])
我想将此系列转换为numpy
数组,如下所示:
series_size = s1.size
dimension_len = np.sqrt(series_size)
**Note: series_size will always have an integer sqrt
dimension_len 将确定所需二维数组中每个维度的大小。
在上面的系列对象中,dimension_len = 3,因此所需的numpy
数组将是一个 3 x 3 数组,如下所示:
np.array([[0, 1, 2],
[3, 4, 5],
[6,7, 8]])
数据框到 Numpy 数组:
我有一个pandas
如下所示的数据框对象:
s1 = pd.Series([0,1,2,3,4,5,6,7,8], index=['AA', 'AB','AC', 'BA','BB','BC','CA','CB','CC'])
s2 = pd.Series([-2,2], index=['AB','BA'])
s3 = pd.Series([4,3,-3,-4], index=['AC','BC', 'CB','CA'])
df = pd.concat([s1, s2, s3], axis=1)
max_size = max(s1.size, s2.size, s3.size)
dimension_len = np.sqrt(max_size)
num_columns = len(df.columns)
**Note: max_size will always have an integer sqrt
结果numpy
数组将由以下信息确定:
num_columns = 确定数组的维数 dimension_len = 确定每个维度的大小
在上面的示例中,所需的numpy
数组将是 3 x 3 x 3(num_columns = 3 和 dimension_len = 3)
同样,df 的第一列将变为 DESIRED_ARRAY[0],df 的第二列将变为 DESIRED_ARRAY[1],df 的第三列将变为 DESIRED_ARRAY[2],依此类推...
我想要的所需数组如下所示:
np.array([[[0, 1, 2],
[3, 4, 5],
[6, 7, 8]],
[[np.nan,-2, np.nan],
[2, np.nan, np.nan],
[np.nan, np.nan, np.nan]],
[[np.nan,np.nan, 4],
[np.nan, np.nan, 3],
[-4, -3, np.nan]],
])
解决方案
IIUC,您可以尝试 numpy transpose 和reshape
df.values.T.reshape(-1, int(dimension_len), int(dimension_len))
Out[30]:
array([[[ 0., 1., 2.],
[ 3., 4., 5.],
[ 6., 7., 8.]],
[[nan, -2., nan],
[ 2., nan, nan],
[nan, nan, nan]],
[[nan, nan, 4.],
[nan, nan, 3.],
[-4., -3., nan]]])
推荐阅读
- azure - 在推送 VS 表格项目 (*.bim) 后,我们可以决定运行哪个发布管道吗?
- windows - Visual Basic 关闭程序
- javascript - Bootstrap 4 表单验证:为密码比较添加相同的规则
- git - 如何仅更新一组工作存储库中的 master?
- ruby - bundle exec 中间人服务器未按预期工作
- excel - Excel将包含'E'的字符串视为指数值
- angular - 如何在Angular中对按钮单击事件进行单元测试?
- python - 有没有办法在不同的替代分支中统一正则表达式捕获组?
- flutter - 如何在 Flutter 中获取有关提供者上下文更改的网络数据
- excel - VBA Excel取消过滤和重新过滤