ValueError: Cannot copy sequence to array axis in

2019-08-30 01:06发布

问题:

I am reading in a constantly updated data.txt file and am calculating a rolling standard deviation on the incoming data stream. I am storing that in std. I have a window size of 100 on the rolling standard deviation.

I am receiving an error:

ValueError: cannot copy sequence with size 78 to array axis with dimension 1

where the size corresponds to the number of items in the std array. (So this, of course, increases every time I hit Run).

I was wondering why I am receiving this ValueError, and am looking for any suggestions to fix it! The animation works fine when I am just grading ax1.plot(xar, yar). But once I try to graph ax1.plot(xar, std), the problem arises.

The data in data.txt looks as follows:

[0.0, 0.0078125, 0.015625][0.0, 0.0078125, 0.015625][0.0, 0.0078125, 0.015625][0.0, 0.0078125, 0.015625][0.0, 0.0078125, 0.015625][0.0, 0.0078125, 0.015625][0.0244140625, 0.0322265625, 0.9609375][0.0244140625, 0.0322265625, 0.9609375][0.0244140625, 0.0322265625, 0.9609375][0.0244140625, 0.0322265625, 0.9609375][0.0244140625, 0.0322265625, 0.9609375][0.0244140625, 0.0322265625, 0.9609375][0.0244140625, 0.0322265625, 0.9609375][0.0244140625, 0.0322265625, 0.9609375][0.0244140625, 0.0322265625, 0.9609375][0.0263671875, 0.0341796875, 1.0341796875][0.0263671875, 0.0341796875, 1.0341796875][0.0263671875, 0.0341796875, 1.0341796875][0.0263671875, 0.0341796875, 1.0341796875][0.0263671875, 0.0341796875, 1.0341796875][0.0263671875, 0.0341796875, 1.0341796875][0.0263671875, 0.0341796875, 1.0341796875][0.0263671875, 0.0341796875, 1.0341796875][0.0244140625, 0.0341796875, 1.0048828125][0.0244140625, 0.0341796875, 1.0048828125][0.0244140625, 0.0341796875, 1.0048828125][0.0244140625, 0.0341796875, 1.0048828125][0.0244140625, 0.0341796875, 1.0048828125][0.0244140625, 0.0341796875, 1.0048828125][0.0244140625, 0.0341796875, 1.0048828125][0.0244140625, 0.0341796875, 1.0048828125][0.0244140625, 0.0341796875, 1.0048828125][0.025390625, 0.0341796875, 1.0107421875][0.025390625, 0.0341796875, 1.0107421875][0.025390625, 0.0341796875, 1.0107421875][0.025390625, 0.0341796875, 1.0107421875][0.025390625, 0.0341796875, 1.0107421875][0.025390625, 0.0341796875, 1.0107421875][0.025390625, 0.0341796875, 1.0107421875][0.025390625, 0.0341796875, 1.0107421875][0.025390625, 0.0341796875, 1.009765625][0.025390625, 0.0341796875, 1.009765625][0.025390625, 0.0341796875, 1.009765625][0.025390625, 0.0341796875, 1.009765625][0.025390625, 0.0341796875, 1.009765625][0.025390625, 0.0341796875, 1.009765625][0.025390625, 0.0341796875, 1.009765625][0.025390625, 0.0341796875, 1.009765625][0.025390625, 0.0341796875, 1.009765625][0.025390625, 0.033203125, 1.009765625][0.025390625, 0.033203125, 1.009765625][0.025390625, 0.033203125, 1.009765625][0.025390625, 0.033203125, 1.009765625][0.025390625, 0.033203125, 1.009765625][0.025390625, 0.033203125, 1.009765625][0.025390625, 0.033203125, 1.009765625][0.025390625, 0.033203125, 1.009765625][0.025390625, 0.0341796875, 1.009765625][0.025390625, 0.0341796875, 1.009765625][0.025390625, 0.0341796875, 1.009765625][0.025390625, 0.0341796875, 1.009765625][0.025390625, 0.0341796875, 1.009765625][0.025390625, 0.0341796875, 1.009765625][0.025390625, 0.0341796875, 1.009765625][0.025390625, 0.0341796875, 1.009765625][0.0263671875, 0.0341796875, 1.009765625][0.0263671875, 0.0341796875, 1.009765625][0.0263671875, 0.0341796875, 1.009765625][0.0263671875, 0.0341796875, 1.009765625][0.0263671875, 0.0341796875, 1.009765625][0.0263671875, 0.0341796875, 1.009765625][0.0263671875, 0.0341796875, 1.009765625][0.0263671875, 0.0341796875, 1.009765625][0.0263671875, 0.0341796875, 1.009765625][0.025390625, 0.0341796875, 1.009765625][0.025390625, 0.0341796875, 1.009765625][0.025390625, 0.0341796875, 1.009765625][0.025390625, 0.0341796875, 1.009765625][0.025390625, 0.0341796875, 1.009765625][0.025390625, 0.0341796875, 1.009765625][0.025390625, 0.0341796875, 1.009765625][0.025390625, 0.0341796875, 1.009765625][0.025390625, 0.0341796875, 1.009765625][0.025390625, 0.0341796875, 1.009765625][0.025390625, 0.0341796875, 1.009765625][0.025390625, 0.0341796875, 1.009765625][0.025390625, 0.0341796875, 1.009765625][0.025390625, 0.0341796875, 1.009765625][0.025390625, 0.0341796875, 1.009765625][0.025390625, 0.0341796875, 1.009765625][0.025390625, 0.0341796875, 1.009765625][0.025390625, 0.0341796875, 1.0107421875][0.025390625, 0.0341796875, 1.0107421875][0.025390625, 0.0341796875, 1.0107421875][0.025390625, 0.0341796875, 1.0107421875][0.025390625, 0.0341796875, 1.0107421875][0.025390625, 0.0341796875, 1.0107421875][0.025390625, 0.0341796875, 1.0107421875][0.025390625, 0.0341796875, 1.0107421875][0.025390625, 0.0341796875, 1.009765625][0.025390625, 0.0341796875, 1.009765625][0.025390625, 0.0341796875, 1.009765625][0.025390625, 0.0341796875, 1.009765625][0.025390625, 0.0341796875, 1.009765625][0.025390625, 0.0341796875, 1.009765625][0.025390625, 0.0341796875, 1.009765625]

My current code is as follows:

fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)

def animate(i):
    data = pd.read_csv("C:\\Users\\Desktop\\data.txt", sep="\[|\]\[|\]",engine = 'python', header = None)
    data = data.iloc[0]
    data = data.astype(str).apply(lambda x: x.split(',')[-1]).astype(float)
    data.pop(0)
    xar = []
    yar = []
    std = []
    for j in range(len(data)):
        xar.append(j)
    for k in range(len(data)):
        yar.append(data.iloc[k])
    yar = pd.DataFrame(yar)
    std.append(pd.rolling_std(yar, 100))
    ax1.clear()
    ax1.plot(xar,std)
ani = animation.FuncAnimation(fig, animate, interval=.01)
plt.show()

回答1:

The reason for your error is that you stdbecomes a list (of one element) of a data frame. pd.rolling_std() is already giving you a data frame, and then you append it to your list. If you just directly assign it, it will work better:

std = pd.rolling_std(yar, 100)

However, when running pd.rolling_std() there is a deprecation warning given. So, the line should rather be:

std = yar.rolling(window=100,center=False).std()

Also, there are a few more simplifications that can be made as of how you generate xar and yar. xar is just a range and yar contains all the elements of data allowing you to write:

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.animation as animation

def animate(i):
    data = pd.read_csv("C:\\Users\\Desktop\\data.txt", sep="\[|\]\[|\]",engine = 'python', header = None)
    data = data.iloc[0]
    data = data.astype(str).apply(lambda x: x.split(',')[-1]).astype(float)
    data.pop(0)
    xar = range(len(data))
    yar = pd.DataFrame(data)
    std = yar.rolling(window=100,center=False).std()
    ax1.clear()
    ax1.plot(xar,std)

fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)
ani = animation.FuncAnimation(fig, animate, interval=.01)
plt.show()

where animate() has been somewhat simplified.