Возникли проблемы с Array Appending - PullRequest
0 голосов
/ 12 июня 2019

Я чувствую себя немного глупо, потому что застрял на чем-то, что так долго казалось простым, но, так как я собираюсь просунуть голову в стену, я решил попросить о помощи.

У меня есть цикл, который разбивает мои данные на более мелкие подмножества и проходит по каждому из них. Для каждого цикла создается массив y_test и y_pred. Это будет переменный размер, но форма (X,). Чтобы построить два массива друг против друга, я просто назначил массивы пустому фрейму данных и просто использовал matplotlib для построения графика.

Теперь я хотел бы также иметь возможность сохранять итоговую сумму y_pred и y_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 голосов
/ 13 июня 2019

Можно создавать DataFrames из массивов numpy и наоборот:

# 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)

DataFrames также могут делать это, но строка данных может иметь только одно измерение.

# 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 сначала необходимо создать серию или 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...