24

pandas.Seriesのバグのように見えます。

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にいます。

4

5 に答える 5

44

reshapeSeriesのvalues配列を呼び出すことができます。

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

実際には、シリーズに適用することは常に意味があるとは限りませんreshape(インデックスを無視しますか?)。

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

そうは言っても、これをやろうとするとバグのように見えるという事実に同意します。

于 2013-01-18T00:15:30.670 に答える
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 は実際には Series に実装されており、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]])
于 2013-02-09T20:23:55.670 に答える
0

Series の形状を変更するために直接使用できますa.reshape((2,2))が、pandas DataFrame には形状変更関数がないため、pandas DataFrame を直接形状変更することはできませんが、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)
于 2016-03-05T17:21:04.420 に答える