将一维Numpy数组作为一行添加到DataFrame

时间:2019-10-08 19:30:59

标签: python arrays pandas numpy dataframe

是否有一个函数可以让您有效地将NumPy数组直接附加到DataFrame?

变量:

df = pd.DataFrame(columns=['col1', 'col2', 'col3'])

Out[1]: +------+------+------+
        | Col1 | Col2 | Col3 |
        +------+------+------+
        |      |      |      |
        +------+------+------+


arr = np.empty(3)

# array is populated with values. Random numbers are chosen in this example,
#    but in my program, the numbers are not arbitrary.
arr[0] = 756
arr[1] = 123
arr[2] = 452

Out[2]: array([756, 123, 452])

如何直接将arr附加到df的末尾以获取此信息?

+------+------+------+
| Col1 | Col2 | Col3 |
+------+------+------+
|  756 |  123 |  452 |
+------+------+------+

我尝试使用df.append(arr),但是它不接受NumPy数组。我可以将NumPy数组转换为DataFrame然后追加它,但是我认为这样的效率非常低,尤其是经过数百万次迭代后。有更有效的方法吗?

3 个答案:

答案 0 :(得分:1)

@rafaelc注释仅在将Pandas DataFrame的索引从0索引为len(df)-1时才有效,因此这不是一般的解决方法,并且很容易在代码中产生静默错误。

如果您确定Numpy数组具有与Pandas DataFrame相同的列,则可以尝试使用 append 函数和dict理解,如下所示:

data_to_append = {}
for i in range(len(df.columns)):
    data_to_append[df.columns[i]] = arr[i]
df = df.append(data_to_append, ignore_index = True)

您需要重新分配DataFrame,因为append函数不支持就地修改。

希望对您有帮助。

答案 1 :(得分:1)

这将起作用:

df.append(pd.DataFrame(arr).T)

答案 2 :(得分:0)

@BalrogOfMoira真的比简单地创建要追加的数据帧快吗?

df.append(pd.DataFrame(arr.reshape(1,-1), columns=list(df), ignore_index=True)) 

否则,@ Wonton可以简单地将数组连接起来,然后写入数据帧,然后可以将其附加到原始数据帧。