Как итеративно добавлять строки в начальный пустой панд Dataframe? - PullRequest
0 голосов
/ 09 ноября 2019

Мне нужно итеративно добавлять строки в DataFrame для панд, и это довольно сложно достичь. Кроме того, с точки зрения производительности, я не уверен, что это лучший подход.

Так что время от времени я получаю данные с сервера, и этот новый набор данных с сервера будет новой строкой в ​​моей панде DataFrame,

import pandas as pd
import datetime

df = pd.DataFrame([], columns=['Timestamp', 'Value'])

# as this df will grow over time, is this a costly copy (df = df.append) or does pandas does some optimization there, or is there a better way to achieve this?
# ignore_index, as I want the index to automatically increment
df = df.append({'Timestamp': datetime.datetime.now()}, ignore_index=True)
print(df)

Через один день DataFrame будет удален, но в течение этого времени, вероятно, будет добавлено 100 тыс. Раз новой строки с данными.

Цель по-прежнему заключается в том, чтобы добиться этого вочень эффективный способ с точки зрения времени выполнения (память не имеет большого значения, так как имеется достаточно ОЗУ).

1 Ответ

0 голосов
/ 09 ноября 2019

Я попытался сравнить скорость 'append' по сравнению с 'loc':

import timeit

code = """
import pandas as pd
df = pd.DataFrame({'A': range(0, 6), 'B' : range(0,6)})
df= df.append({'A' : 3, 'B' : 4}, ignore_index = True)
"""

code2 = """
import pandas as pd
df = pd.DataFrame({'A': range(0, 6), 'B' : range(0,6)})
df.loc[df.index.max()+1, :] = [3, 4]
"""

elapsed_time1 = timeit.timeit(code, number = 1000)/1000
elapsed_time2 = timeit.timeit(code2, number = 1000)/1000
print('With "append" :',elapsed_time1)
print('With "loc" :' , elapsed_time2)

На моей машине я получил следующие результаты:

With "append" : 0.001502693824000744
With "loc" : 0.0010836279180002747

Используя "loc""Кажется, быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...