Cela me ressemble à un bug dans pandas.Series.
a = pd.Series([1,2,3,4])
b = a.reshape(2,2)
b
b a le type Series mais ne peut pas être affiché, la dernière instruction donne une exception, très longue, la dernière ligne est "TypeError:% d format: un nombre est requis, pas numpy.ndarray". b.shape renvoie (2,2), ce qui contredit son type Series. Je suppose que peut-être pandas.Series n’implémente pas la fonction de remodelage et j’appelle la version de np.array? Quelqu'un voit cette erreur aussi? Je suis à Pandas 0.9.1.
Vous pouvez appeler reshape
sur le values tableau de la série:
In [4]: a.values.reshape(2,2)
Out[4]:
array([[1, 2],
[3, 4]], dtype=int64)
En fait, je pense qu’il n’est pas toujours logique d’appliquer reshape
à une série (ignorez-vous l’index?), Et que vous avez raison de penser que c’est simplement une refonte de numpy:
a.reshape?
Docstring: See numpy.ndarray.reshape
Cela dit, je suis d’accord sur le fait que cela vous permet d’essayer de faire cela, cela ressemble à un bogue.
La fonction reshape prend la nouvelle forme sous forme de tuple plutôt que sous la forme d'arguments multiples:
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 est effectivement implémenté dans Series et retournera un 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]])
vous pouvez directement utiliser a.reshape((2,2))
pour remodeler une série, mais vous ne pouvez pas remodeler directement un pandas DataFrame, car il n’existe pas de fonction de remodelage pour pandas DataFrame, mais vous pouvez le remodeler sur numpy ndarray:
par exemple.
a = pd.DataFrame([[1,2,3],[4,5,6]])
b = a.as_matrix().reshape(3,2)
a = pd.DataFrame(b)
Utilisez simplement le code ci-dessous:
b=a.values.reshape(2,2)
Je pense que cela vous aidera. vous pouvez directement utiliser uniquement la fonction reshape (), mais elle vous avertira