将一维 Numpy 数组作为行添加到 DataFrame
Posted
技术标签:
【中文标题】将一维 Numpy 数组作为行添加到 DataFrame【英文标题】:Add A 1-D Numpy Array to DataFrame as a Row 【发布时间】:2020-02-06 03:03:23 【问题描述】:是否有一个函数可以让您有效地将 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 然后附加它,但我认为这将非常低效,尤其是在数百万次迭代中。有没有更有效的方法?
【问题讨论】:
使用df.loc[len(df)] = arr
@rafaelc 很快就会慢下来。一旦你的行数达到 10 万行,每行开始需要 10 毫秒,而且还有 90 万多行
@ALollz 但没有人说有一个 for 循环,我们在每次迭代时都附加
您能否提供更多有关您如何生成这些数字的信息?可能最好的解决方案是预先分配所有内容,相应地填充它,然后在最后构造 DataFrame。
【参考方案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
函数不支持就地修改。
希望对你有帮助。
【讨论】:
【参考方案2】:@BalrogOfMoira 真的比简单地创建要追加的数据框更快吗?
df.append(pd.DataFrame(arr.reshape(1,-1), columns=list(df)), ignore_index=True)
否则@Wonton,您可以简单地连接数组,然后写入数据帧,该数据帧可以附加到原始数据帧。
【讨论】:
如果 DataFrame 已经存在并填充了数据,这很有用。【参考方案3】:这将起作用:
df.append(pd.DataFrame(arr).T)
【讨论】:
如果列索引是整数(并且列索引不是从零开始),则它不起作用。它将索引从零开始的列添加到 df.columns 中的最小索引,并将 arr 值仅分配给第一个 len(arr) 元素。以上是关于将一维 Numpy 数组作为行添加到 DataFrame的主要内容,如果未能解决你的问题,请参考以下文章