web-dev-qa-db-fra.com

Remodeler la série des pandas?

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.

12
szli

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.

18
Andy Hayden

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]])
1
Chang She

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:

  1. convertir DataFrame en numpy ndarray
  2. refaçonner
  3. reconvertir

par exemple.

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

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

0
Akash Nayak