TLDR: не додавати елементи до серії один за одним, краще розширити за допомогою упорядкованої колекції
Я думаю, що питання у його нинішньому вигляді є дещо хитрим. І прийнята відповідь дійсно відповідає на питання. Але чим більше я використовую панд, тим більше розумію, що погано додавати елементи до Серії по одному. Спробую пояснити, чому для панд-початківців.
Ви можете подумати, що додавання даних до даної Серії може дозволити Вам повторно використати деякі ресурси, але насправді Серія - це просто контейнер, який зберігає відношення між індексом та масивом значень. Кожен - це масив numpy.arry під капотом, а індекс незмінний. Коли ви додаєте до Серії елемент із міткою, якої немає в індексі, створюється новий індекс розміром n + 1 та масив значень нових значень того самого розміру. Це означає, що коли ви додаєте елементи по одному, ви створюєте ще два масиви розміром n + 1 на кожному кроці.
До речі, ви не можете додати новий елемент за позицією (ви отримаєте IndexError), і мітка в індексі не повинна бути унікальною, тобто коли ви присвоюєте значення міткою, ви присвоюєте значення усім наявні елементи з міткою, і новий рядок у цьому випадку не додається. Це може призвести до незначних помилок.
Мораль історії полягає в тому, що ви не повинні додавати дані один за іншим, вам краще поширити їх із замовленою колекцією. Проблема в тому, що ви не можете продовжити серію на місці. Ось чому краще впорядкувати свій код так, щоб вам не потрібно було оновлювати певний екземпляр серії за посиланням.
Якщо ви створюєте мітки самостійно, і вони збільшуються, найпростіший спосіб - додати нові елементи до словника, а потім створити нову серію зі словника (вона сортує ключі) і додати серію до старої. Якщо ключі не збільшуються, вам потрібно буде створити два окремих списки для нових міток та нових значень.
Нижче наведено кілька зразків коду:
In [1]: import pandas as pd
In [2]: import numpy as np
In [3]: s = pd.Series(np.arange(4)**2, index=np.arange(4))
In [4]: s
Out[4]:
0 0
1 1
2 4
3 9
dtype: int64
In [6]: id(s.index), id(s.values)
Out[6]: (4470549648, 4470593296)
Коли ми оновлюємо існуючий елемент, індекс та масив значень залишаються незмінними (якщо ти не змінюєш тип значення)
In [7]: s[2] = 14
In [8]: id(s.index), id(s.values)
Out[8]: (4470549648, 4470593296)
Але коли ви додаєте новий елемент, генерується новий індекс та новий масив значень:
In [9]: s[4] = 16
In [10]: s
Out[10]:
0 0
1 1
2 14
3 9
4 16
dtype: int64
In [11]: id(s.index), id(s.values)
Out[11]: (4470548560, 4470595056)
Тобто якщо ви збираєтеся додати кілька предметів, зібрати їх у словник, створити Серію, додати її до старої та зберегти результат:
In [13]: new_items = {item: item**2 for item in range(5, 7)}
In [14]: s2 = pd.Series(new_items)
In [15]: s2
Out[15]:
5 25
6 36
dtype: int64
In [16]: s = s.append(s2); s
Out[16]:
0 0
1 1
2 14
3 9
4 16
5 25
6 36
dtype: int64