将连续的行追加到Python数据帧

时间:2017-07-02 15:32:07

标签: python numpy

我想创建一个二维的numpy数组。

我试过了:

import numpy as np

result = np.empty
np.append(result, [1, 2, 3])
np.append(result, [4, 5, 9])

1.数组的维度为:(2, 3)。我怎么能得到它们?

我试过了:

print(np.shape(result))
print(np.size(result))

但这会打印出来:

()
1

2.如何访问数组中的特定元素?

我试过了:

print(result.item((1, 2)))

但是这会回来:

Traceback (most recent call last):
  File "python", line 10, in <module>
AttributeError: 'builtin_function_or_method' object has no attribute 'item'

2 个答案:

答案 0 :(得分:3)

理想情况下,您应该在交互式会话中测试此类代码,您可以在其中轻松获取有关步骤的更多信息。我将在ipython中进行说明。

In [1]: result = np.empty
In [2]: result
Out[2]: <function numpy.core.multiarray.empty>

这是一个函数,而不是数组。正确使用是result = np.empty((3,))。那就是你必须用所需的大小参数调用函数。

In [3]: np.append(result, [1,2,3])
Out[3]: array([<built-in function empty>, 1, 2, 3], dtype=object)

append已创建一个数组,但请查看内容 - 函数和3个数字。和dtypenp.append也会返回结果。它不能就地工作。

In [4]: result.item((1,2))
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-4-51f2b4be4f43> in <module>()
----> 1 result.item((1,2))

AttributeError: 'builtin_function_or_method' object has no attribute 'item'

您的错误告诉我们result是一个函数,而不是一个数组。你在一开始就设定了同样的东西。

In [5]: np.shape(result)
Out[5]: ()
In [6]: np.array(result)
Out[6]: array(<built-in function empty>, dtype=object)

在这种情况下,np.shapenp.size的函数版本不具有诊断功能,因为它们首先将result转换为数组。 result.shape会出错。

潜在的问题是您使用的是列表模型

result = []
result.append([1,2,3])
result.append([4,5,6])

但是数组append被错误命名并被滥用。它只是np.concatenate的前端。如果您不理解concatenate,则可能不会使用np.append。事实上,我认为你根本不应该使用np.append

使用append的正确方法是从大小为0的数组开始,并重用结果:

In [7]: result = np.empty((0,3),int)
In [8]: result
Out[8]: array([], shape=(0, 3), dtype=int32)
In [9]: result = np.append(result,[1,2,3])
In [10]: result
Out[10]: array([1, 2, 3])
In [11]: result = np.append(result,[4,5,6])
In [12]: result
Out[12]: array([1, 2, 3, 4, 5, 6])

但也许这不是你想要的?即使我在滥用append

回到绘图板:

In [15]: result = []
In [16]: result.append([1,2,3])
In [17]: result.append([4,5,6])
In [18]: result
Out[18]: [[1, 2, 3], [4, 5, 6]]
In [19]: result = np.array(result)
In [20]: result
Out[20]: 
array([[1, 2, 3],
       [4, 5, 6]])

使用真实数组,您的item表达式有效,但通常我们使用[]索引:

In [21]: result[1,2]
Out[21]: 6
In [22]: result.item((1,2))
Out[22]: 6

np.append的源代码(请注意使用np.concatenate):

In [23]: np.source(np.append)
In file: /usr/local/lib/python3.5/dist-packages/numpy/lib/function_base.py

def append(arr, values, axis=None):
    """
    ...
    """
    arr = asanyarray(arr)
    if axis is None:
        if arr.ndim != 1:
            arr = arr.ravel()
        values = ravel(values)
        axis = arr.ndim-1
    return concatenate((arr, values), axis=axis)

答案 1 :(得分:1)

这不是使用numpy数组的方法。 empty是一个功能。例如,append返回新数组,但您忽略了返回值。

要创建二维数组,请使用:

In [3]: result = np.array([[1, 2, 3], [4, 5, 9]])

找到它的形状:

In [4]: result.shape
Out[4]: (2, 3)

访问特定元素:

In [5]: result[1][2]
Out[5]: 9