我的问题需要将行增量添加到已排序的DataFrame
(带DateTimeIndex
),但我目前无法找到有效的方法来执行此操作。似乎没有任何“insort”的概念。
我尝试将行添加到适当的位置,并且我也尝试使用searchsorted
获取插入点并切片并连接以创建新的DataFrame
。两者都“太慢”。
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
答案 0 :(得分:2)
pandas
建立在numpy
之上。 numpy数组是固定大小的对象。虽然有numpy append和insert函数,但实际上它们是根据旧数据和新数据构造新数组。
有两种实用方法可以逐步定义这些数组:
初始化一个大的空数组,并逐步填写值
逐步创建Python列表(或字典),并从完成列表中创建数组。
附加到Python列表是一项常见且快速的任务。还有一个列表插入,但速度较慢。对于排序插入,有专门的Python结构(例如bisect
)。
Pandas可能已添加了处理常见创建方案的功能。但除非它在C中编写了一些特殊的东西,否则它不可能比更基本的Python结构更快。
即使你必须在增量版本的各个点使用Pandas功能,最好还是从底层的Python结构中动态创建一个新的DataFrame。