高效地将行插入到已排序的 DataFrame 中

Efficient insertion of row into sorted DataFrame

我的问题需要将行增量添加到已排序的 DataFrame(带有 DateTimeIndex)中,但我目前无法找到执行此操作的有效方法。好像没有"insort".

的概念

我试过追加行并就地求助,我也试过使用 searchsorted 获取插入点并切片和连接以创建新的 DataFrame。两者都是 "too slow".

Pandas 是否不适合不能同时拥有所有数据而是逐步获取数据的工作?

我尝试过的解决方案:

串联

def insert_data(df, data, index):
    insertion_index = df.index.searchsorted(index)
    new_df = pandas.concat([df[:insertion_index], pandas.DataFrame(data, index=[index]), df[insertion_index:]])
    return new_df, insertion_index

度假村

def insert_data(df, data, index):
    new_df = df.append(pandas.DataFrame(data, index=[index]))
    new_df.sort_index(inplace=True)
    return new_df

pandas 建立在 numpy 之上。 numpy 数组是固定大小的对象。虽然有 numpy 的追加和插入函数,但实际上它们会根据新旧数据构造新数组。

增量定义这些数组有 2 种实用方法:

  • 初始化一个大的空数组,并增量填充值

  • 逐步创建一个 Python 列表(或字典),并从完成的列表创建数组。

追加到 Python 列表是一项常见且快速的任务。还有一个列表插入,但速度较慢。对于排序插入,有专门的 Python 结构(例如 bisect)。

Pandas可能增加了处理常见创作场景的功能。但是除非它用 C 编写了一些特殊的代码,否则它不太可能比更基本的 Python 结构更快。

即使您必须在增量构建的各个点使用 Pandas 功能,最好从底层 Python 结构动态创建一个新的 DataFrame。