Изменить форму рядов панд?

Это выглядит как ошибка в пандах. Серии.

a = pd.Series([1,2,3,4])
b = a.reshape(2,2)
b

b имеет тип Series, но не может быть отображен, последний оператор дает исключение, очень длинный, последняя строка - "TypeError:% d format: требуется номер, а не numpy.ndarray". b.shape возвращает (2,2), что противоречит его типу Series. Я предполагаю, возможно, pandas.Series не реализует функцию reshape, и я вызываю версию из np.array? Любой тоже видит эту ошибку? Я в пандах 0.9.1.

Ответ 1

Вы можете вызвать reshape в массиве значений Series:

In [4]: a.values.reshape(2,2)
Out[4]: 
array([[1, 2],
       [3, 4]], dtype=int64)

Я на самом деле думаю, что не всегда имеет смысл применить reshape к серии (игнорируете ли вы индекс?), И что вы правы, думая, что это просто numpy reshape:

a.reshape?
Docstring: See numpy.ndarray.reshape

что я согласен с тем, что он позволяет вам делать это, похоже на ошибку.

Ответ 2

Функция reshape принимает новую форму как кортеж, а не как несколько аргументов:

In [4]: a.reshape?
Type:       function
String Form:<function reshape at 0x1023d2578>
File:       /Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/numpy/core/fromnumeric.py
Definition: numpy.reshape(a, newshape, order='C')
Docstring:
Gives a new shape to an array without changing its data.

Parameters
----------
a : array_like
    Array to be reshaped.
newshape : int or tuple of ints
    The new shape should be compatible with the original shape. If
    an integer, then the result will be a 1-D array of that length.
    One shape dimension can be -1. In this case, the value is inferred
    from the length of the array and remaining dimensions.

Reshape фактически реализуется в серии и возвращает ndarray:

In [11]: a
Out[11]: 
0    1
1    2
2    3
3    4

In [12]: a.reshape((2, 2))
Out[12]: 
array([[1, 2],
       [3, 4]])

Ответ 3

вы можете напрямую использовать a.reshape((2,2)) для изменения серии, но вы не можете напрямую изменить Pandas DataFrame, потому что для pandas DataFrame нет функции reshape, но вы можете изменить ее на numpy ndarray:

  1. конвертировать DataFrame в numpy ndarray
  2. изменить форму
  3. конвертировать назад

например

a = pd.DataFrame([[1,2,3],[4,5,6]])
b = a.as_matrix().reshape(3,2)
a = pd.DataFrame(b)

Ответ 4

Просто используйте этот ниже код:

b=a.values.reshape(2,2)

Я думаю, это поможет вам. u может напрямую использовать только функцию reshape(), но это даст будущее предупреждение