Python 在pandas中添加的更快方法

Python 在pandas中添加的更快方法,python,pandas,Python,Pandas,我目前正在修改循环结构中的pandas数据帧,其外观如下: for item in item_list: ~~~~ do something to the item ~~~~~ results_df = results_df.append(item) 这段代码适用于附加的小项目和结果很小的时候。但是,我要添加的项相当大,而且循环相当长,这意味着这个循环需要相当长的时间才能完成,因为当它变大时复制结果的开销很大 我可以看到的一个解决方案是,我可以将项目附加到此词典中的

我目前正在修改循环结构中的pandas数据帧,其外观如下:

for item in item_list:
    
    ~~~~ do something to the item ~~~~~

    results_df = results_df.append(item)
这段代码适用于附加的小项目和结果很小的时候。但是,我要添加的项相当大,而且循环相当长,这意味着这个循环需要相当长的时间才能完成,因为当它变大时复制结果的开销很大

我可以看到的一个解决方案是,我可以将项目附加到此词典中的列表中,如:

results_dict = {'result_1': [], 'result_2': [], 'result_3': []}
for item in item_list:
    item_1, item_2, item_3 = item

    ~~~~~ do something ~~~~

    results_dict['result_1'].append(item_1)
    results_dict['result_2'].append(item_2)
    results_dict['result_3'].append(item_3)


然后可以从生成的字典生成数据帧。这是可以的,但似乎不是最佳的。有谁能想出更好的解决办法吗?注意:item_list中的每个item中的item都是相当大的数据帧,在该数据帧上会发生一些复杂的处理,item_list的长度约为1000,尽管您对字典也这样做,但根据我的理解,将list作为字典键值附加,您的额外复杂性为O(1)对于字典查找,对于每个迭代

您可以列出或列出每列(案例中的项目),并从这些列表中生成数据框

item_1_list = []
item_2_list = []
item_3_list = []

for item in item_list:
    item_1, item_2, item_3 = item
    
    item_1_list.append(item_1)
    item_2_list.append(item_2)
    item_3_list.append(item_3)

df = pd.DataFrame({'item_1': item_1_list, 'item_2': item_2_list,'item_3': item_3_list})
del item_1_list,item_2_list,item_3_list
虽然O(1)的字典查找并没有多大关系,但我认为使用列表仍然会更好

以下是基准

谢谢你的方法

import timeit

start = timeit.default_timer()

results_dict = {'result_1': [], 'result_2': [], 'result_3': []}
for item in range(1000):
    

    

    results_dict['result_1'].append(item)
    results_dict['result_2'].append(item)
    results_dict['result_3'].append(item)
df = pd.DataFrame(results_dict)
stop = timeit.default_timer()

print('Time: ', stop - start) 
所需时间:

Time:  0.013144109999984721
Time:  0.005675986999960969
用这种方法

import timeit

start = timeit.default_timer()

item_1_list = []
item_2_list = []
item_3_list = []

for item in range(1000):
    
    
    item_1_list.append(item)
    item_2_list.append(item)
    item_3_list.append(item)

df = pd.DataFrame({'item_1': item_1_list, 'item_2': item_2_list,'item_3': item_3_list})


stop = timeit.default_timer()

print('Time: ', stop - start)  
所需时间:

Time:  0.013144109999984721
Time:  0.005675986999960969

查看包含输入和预期输出的示例将很有帮助。这个问题非常依赖于这些项目。另请参见:@G.Anderson项目是数字和字符串,它们的计算方式并不重要,因为我已经知道瓶颈在追加操作中这不是minex的目的,它是为了让我们可以为您尝试潜在的解决方案,更好地了解您的确切需求,所以我们不需要猜测。在这种情况下,除了我将数字附加到熊猫数据帧之外,您还需要知道什么?似乎我已经完全定义了这个问题,数字来自哪里,它们是什么形状,它们的确切类型和值是什么等等。这是我已经用字典解决的问题…我编辑了答案,并写了为什么我认为它仍然更好常数因子不会改变大的oh符号。O(3)=O(1)。@Jasmijn好的,谢谢你们的指导,但为什么基准测试中会有差异,O(1)还会补充吗?如果不是,我想我的答案是不正确的?如果两个算法具有相同的时间复杂度,这意味着它们可以在常数因子上有所不同,但随着输入的增大,这种差异不会增大。如果没有字典的需要1秒,有dict的需要2.3秒,如果一个需要1小时,另一个需要2.3小时,等等。假设有另一个算法可以在O(log(N))时间而不是O(N)时间中添加N项,那么这将对在大数据集上操作的性能产生更大的影响。