【发布时间】:2019-06-27 15:53:01
【问题描述】:
我正在尝试使用下面的 sn-p 构建一个遍历每一行的滑动窗口:
从excel中读取数据:
import numpy as np
import pandas as pd
data = pd.read_excel('link_to_excel', header=None)
vals = pd.DataFrame.to_numpy(data)
col_count, row_count = vals.shape
excel 中的数据如下所示:
i = [[ 1 2 3 4 5 6 7 8 9 10]
[11 12 13 14 15 16 17 18 19 20]
[21 22 23 23 25 26 27 28 29 30]
[ 1 2 3 4 5 6 7 8 9 10]
[21 22 23 23 25 26 27 28 29 30]
[21 22 23 23 25 26 27 28 29 30]
[ 1 2 3 4 5 6 7 8 9 10]]
滑动窗口功能:
def rolling(a, window):
shape = (a.size - window + 1, window)
strides = (a.itemsize, a.itemsize)
return np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides, writeable=False)
当我跑步时:
window = 6
print(rolling(i, window))
我得到一个看起来像这样的滑动窗口(向下遍历i 的列):
[[ 1 11 21 1 21 21]
[11 21 1 21 21 1]
[21 1 21 21 1 2]
[ 1 21 21 1 2 12]
[21 21 1 2 12 22]]
根据i的第一行行,我正在寻找的所需滑动窗口:
[[1 2 3 4 5 6]
[2 3 4 5 6 7]
[3 4 5 6 7 8]
[4 5 6 7 8 9]
[5 6 7 8 9 10]]
当我使用np.random.randint(1, 31, size=(7, 10)) 生成i 时,我得到了我想要的结果。
从excel读取时如何获得想要的滑动窗口?
print(i.ravel(order='K'))的输出
[ 1 11 21 1 21 21 1 2 12 22 2 22 22 2 3 13 23 3 23 23 3 4 14 24
4 24 24 4 5 15 25 5 25 25 5 6 16 26 6 26 26 6 7 17 27 7 27 27
7 8 18 28 8 28 28 8 9 19 29 9 29 29 9 10 20 30 10 30 30 10]
print(i.shape)的输出
(7,10)
样本excel 工作表
【问题讨论】:
-
如上所述,该问题不可重现。你发现生成的数组没有这个问题。
-
抱歉,如果我已经描述了我在获取数据时使用的确切方法、我用来处理它的函数、我得到的结果以及我正在寻找的期望输出。
-
当你使用生成的数组生成 i 时,你会得到一个带逗号的数组。我错过了什么吗?上面的数组看起来像数字文本字符串。
-
@run-out 每个号码的类型是
<class 'numpy.int64'> -
@run-out,不带逗号的数组是
numpy数组的典型显示。
标签: python pandas numpy sliding-window