python - 数组附加有问题
问题描述
我觉得被这么简单的事情困了这么久有点傻,但由于我正要把头穿过墙,我想我会寻求一些帮助。
我有一个循环将我的数据分成更小的子集并循环遍历每个子集。对于每个循环,它产生一个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()
解决方案
可以从 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)
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,需要首先从数据中创建 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)
推荐阅读
- bash - 如何在不出现提示的情况下将密码从环境变量传递给 sudo?
- c# - GAC 中的 Google API 程序集问题
- reactjs - 反应多选形式仅将一个选项保存到数组
- c - C 可能的内存泄漏?崩溃
- javascript - 从 Javascript 中的 if 语句执行 DOM 的问题
- python - 在数据集中查找 NaN 和 Infinity 值
- node.js - 用于约会/聊天应用程序的 MongoDB 聚合管道
- node.js - 为什么“npm install”在全新的 NodeJS 安装中寻找一个不存在的文件(package.json)?
- python - 如何在python中解析二进制文件
- phoenix-framework - LiveView 在控制台中不为 CID 错误抛出任何组件