xing
xing

Reputation: 11

ValueError: total size of new array must be unchanged (numpy for reshape)

I want reshape my data vector, but when I running the code

from pandas import read_csv
import numpy as np
#from pandas import Series
#from matplotlib import pyplot

series =read_csv('book1.csv', header=0, parse_dates=[0], index_col=0, squeeze=True)

A= np.array(series)
B = np.reshape(10,10)

print (B)

I found error

result = getattr(asarray(obj), method)(*args, **kwds)

ValueError: total size of new array must be unchanged

my data

Month   xxx
1749-01 58
1749-02 62.6
1749-03 70
1749-04 55.7
1749-05 85
1749-06 83.5
1749-07 94.8
1749-08 66.3
1749-09 75.9
1749-10 75.5
1749-11 158.6
1749-12 85.2
1750-01 73.3
....    ....
....    ....

Upvotes: 1

Views: 2126

Answers (1)

Tim B
Tim B

Reputation: 3143

There seem to be two issues with what you are trying to do. The first relates to how you read the data in pandas:

series = read_csv('book1.csv', header=0, parse_dates=[0], index_col=0, squeeze=True)
print(series)
>>>>Empty DataFrame
Columns: []
Index: [1749-01 58, 1749-02 62.6, 1749-03 70, 1749-04 55.7, 1749-05 85, 1749-06 83.5, 1749-07 94.8, 1749-08 66.3, 1749-09 75.9, 1749-10 75.5, 1749-11 158.6, 1749-12 85.2, 1750-01 73.3]

This isn't giving you a column of floats in a dataframe with the dates the index, it is putting each line into the index, dates and value. I would think that you want to add delimtier=' ' so that it splits the lines properly:

series =read_csv('book1.csv', header=0, parse_dates=[0], index_col=0, delimiter=' ', squeeze=True)
>>>> Month
1749-01-01     58.0
1749-02-01     62.6
1749-03-01     70.0
1749-04-01     55.7
1749-05-01     85.0
1749-06-01     83.5
1749-07-01     94.8
1749-08-01     66.3
1749-09-01     75.9
1749-10-01     75.5
1749-11-01    158.6
1749-12-01     85.2
1750-01-01     73.3
Name: xxx, dtype: float64

This gives you the dates as the index with the 'xxx' value in the column.

Secondly the reshape. The error is quite descriptive in this case. If you want to use numpy.reshape you can't reshape to a layout that has a different number of elements to the original data. For example:

import numpy as np

a = np.array([1, 2, 3, 4, 5, 6])  # size 6 array

a.reshape(2, 3)
>>>> [[1, 2, 3],
      [4, 5, 6]]

This is fine because the array starts out length 6, and I'm reshaping to 2 x 3, and 2 x 3 = 6.

However, if I try:

a.reshape(10, 10)
>>>> ValueError: cannot reshape array of size 6 into shape (10,10)

I get the error, because I need 10 x 10 = 100 elements to do this reshape, and I only have 6.

Without the complete dataset it's impossible to know for sure, but I think this is the same problem you are having, although you are converting your whole dataframe to a numpy array.

Upvotes: 1

Related Questions