我需要你帮我把这个问题的标题写得更好。
但我实际上有一个由2d数组组成的数组框架,(即每一行是名为ab[y][x]的2D图像其中x,y是整数).我试图创建一个数组与形状(number of rows in data frame, len(x), len(y))
通过使用每个二维数组中的点阵. len(x)
也可以被认为是在每个二维数组的行数和len(y)
可以被认为是在每个二维列数数组。我将在下面包含一个MRE:
import numpy as np
import pandas as pd
data = {"ab[0][0]": [329, 392, 9294, 4922, 9324, 95839],
"ab[0][1]": [23, 27, 3299, 827, 60, 47],
"ab[0][2]": [80, 32, 50, 782, 934, 93],
"ab[0][3]": [90, 100, 53, 438, 50, 53],
"ab[1][0]": [6000, 245, 24, 204, 2390, 7248],
"ab[1][1]": [23, 5324, 13, 45, 60, 435],
"ab[1][2]": [4253, 53, 5035, 75, 82, 8347],
"ab[1][3]": [843, 9403, 70, 434, 50, 828],
"ab[2][0]": [600, 5000, 10342, 3453, 3553, 9834],
"ab[2][1]": [23, 27, 13, 45, 8493, 70],
"ab[2][2]": [4983, 4872, 28, 75, 60, 843],
"ab[2][3]": [48739, 2389, 3478, 827, 932, 83],
}
ab_df = pd.DataFrame(data)
ab_values = []
for i in range(ab_df.shape[0]):
individual_ab = []
for j in range(3): # can think of 3 as the x-values on an x-y graph (or 3 columns)
ab_columns = [col for col in ab_df.columns if f'ab[{j}]' in col]
individual_ab.append(ab_df.iloc[[i]][ab_columns].T.values)
if len (individual_ab) > 0: # so I don't add an empty list to the end of the array
ab_values.append(np.hstack(individual_ab))
ab_arr = np.stack(ab_values) # should have (6, 4, 3)
字符串
我的解决方案实际上使用了三个for循环,当处理1000多行的嵌套框时,速度非常慢。
我的主要问题是,有没有更好的方法来做到这一点,也许是通过使用一些numpy或pandas函数或更好的算法?
我的另一个问题是,对于x轴的长度(即for j in range(3)
),是否有一种方法可以使用数据自动计算出来,现在我正在手动编码3,就像上面的例子一样,但是假设数据发生了变化,我需要一种方法来自动更改该值。我一直在试图找出解决方案,但我就是不能解决这个问题。
2条答案
按热度按时间flvlnr441#
IIUC,您可以直接
reshape
DataFrame:字符串
输出量:
型
mcdcgff02#
关于
data
:字符串
框架是:
型
从那里你可以很容易地得到一个数组,每一行一个帧,每一列:
型
很容易重塑这样的数组,或者转置它,等等。
型
或者你想
型