高效地将行插入到已排序的 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。
我的问题需要将行增量添加到已排序的 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。