数组追加有麻烦

时间:2019-06-12 15:53:40

标签: python arrays pandas numpy dataframe

我感到很愚蠢,一直呆在看起来如此简单的事物上这么长时间,但是由于我正要把头伸到墙上,所以我想寻求帮助。

我有一个循环,可将我的数据分成较小的子集,并逐个循环。对于每个循环,它将生成一个y_test和一个y_pred数组。它的大小是可变的,但是形状是(X,)。为了绘制两个数组之间的关系,我只是将数组分配给一个空的数据框,并使用matplotlib进行绘制。

现在,我只希望能够同时保持y_predy_test的运行总数,这样我就可以看到整个数据集的图。

我尝试过的事情:

最初,我只是尝试在循环外创建另一个空数据框,并认为仅将数组附加到数据框的列的末尾,但是我发现无法将数组附加到数据框。

然后我想我每次都会在循环中每次附加一个空数组,并在最后将其转换为数据帧以进行绘图,但是如果我理解正确的话,我也不太幸运-np.append每次附加时都会创建附加数据的新数组吗?不确定这是否会占用大量内存。

我想知道什么是最好的方法?

这是我的代码(我尝试删除了许多问题不需要的行,以使其更容易理解):

continuous_results = pd.Dataframe()
        tscv = TimeSeriesSplit(n_splits=self.no_splits)
        for train_index, test_index in tqdm(tscv.split(X)):
            X_train, X_test = X.iloc[train_index], X.iloc[test_index]
            y_train, y_test = y.iloc[train_index], y.iloc[test_index]



            self.regressor.fit(X_train, y_train.ravel())

            # predict y values
            y_pred = self.regressor.predict(X_test)


            # plot y_pred vs y_test
            y_df = pd.DataFrame()
            y_pred = y_pred.reshape(len(y_pred), )
            y_test = y_test.reshape(len(y_test), )
            y_df['y_pred'] = y_pred
            y_df['y_test'] = y_test
# failed attempts at continuous dataframe
            continuous_results = continuous_results['Model'].append(y_pred[:,:])
            continuous_results = continuous_results['Actual'].append(y_test)


            y_df.plot()

1 个答案:

答案 0 :(得分:0)

可以从numpy数组创建DataFrame,反之亦然:

# If you already have data as an array
data = np.random.random((10,5))
# Create a dataframe from a numpy array
df = pd.DataFrame(data)
# Create a numpy array from a dataframe
as_array = df.to_numpy()

如果要/必须循环,可以使用numpy数组和DataFrames进行。从列表构造一个numpy比在循环中连接数组更有效:

# Looping - arrays can handle n dimensions
data = []
for i in range(10):
    row = np.random.random((1,1,1,1,1))
    # Add a second dimension
    row = row[:,np.newaxis]
    # Remove the second dimension
    row = row[:,-1]
    # A list can hold anything
    data.append(row)
# Construct an array from a list of arrays
array = np.array(data)

DataFrame也可以做到这一点,但一个dataframe行只能具有一个维度。

# looping - dataframes can work with only one dimension per row
data = []
for i in range(10):
    data.append(np.random.random(5))
# Construct a DataFrame from a list of values
df = pd.DataFrame(data)

为了附加到现有的DataFrame,需要首先从数据中创建Series或DataFrame。

df = pd.DataFrame()
for i in range(10):
    n = np.random.random(1)
    # To append to a DataFrame, first create a Series (a row or a column) or a DataFrame
    row = pd.Series(n, name=i)
    # append a Series (or a DataFrame) to the "bottom" of another DataFrame
    df = df.append(row)