24

在我看来,它就像 pandas.Series 中的一个错误。

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

b 有类型 Series 但无法显示,最后一条语句给出异常,非常冗长,最后一行是“TypeError: %d format: a number is required, not numpy.ndarray”。b.shape 返回 (2,2),与其类型 Series 相矛盾。我猜也许 pandas.Series 没有实现重塑功能,我正在从 np.array 调用版本?有人也看到这个错误吗?我在熊猫 0.9.1。

4

5 回答 5

44

您可以调用系列reshape数组:

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

我实际上认为应用于系列并不总是有意义reshape(您是否忽略索引?),并且您认为它只是 numpy 的重塑是正确的:

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 回答
1

只需使用以下代码:

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

我想它会对你有所帮助。你只能直接使用 reshape() 函数。但它会给出未来的警告

于 2017-11-15T12:47:00.387 回答
0

你可以直接使用a.reshape((2,2))reshape一个Series,但是你不能直接reshape一个pandas DataFrame,因为pandas DataFrame没有reshape功能,但是你可以在numpy ndarray上做reshape:

  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 回答
-2

例如我们有一个系列。我们可以像这样将其更改为数据框;

a = pd.DataFrame(a)

于 2020-09-02T16:07:29.123 回答