是否有一个函数可以让您有效地将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然后追加它,但是我认为这样的效率非常低,尤其是经过数百万次迭代后。有更有效的方法吗?
答案 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可以简单地将数组连接起来,然后写入数据帧,然后可以将其附加到原始数据帧。