/
Вопросы и ответы
/
Аналитика данных
/

Как добавить строку в pandas

Как добавить строку в pandas

4 года назад

Arthur Cheremisin

Ответы

0

Чтобы добавить новую строчку в датафрейм мы можем использовать loc(). В качестве индекса мы используем последнюю строчку, то есть длину датафрейма.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import pandas as pd

df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
print(df)
# => A  B
# => 0  1  4
# => 1  2  5
# => 2  3  6

df.loc[len(df)] = [4, 7]  # Добавление строки [4, 7]
print(df)

# => A  B
# => 0  1  4
# => 1  2  5
# => 2  3  6
# => 3  4  7

2 года назад

Ivan Mamtsev

0

Одну строку в конец таблицы добавляют через loc:

1
2
3
4
5
6
7
8
9
import pandas as pd

df = pd.DataFrame({'name': ['Аня', 'Боря'], 'age': [25, 31]})
df.loc[len(df)] = ['Вика', 28]
print(df)
#    name  age
# 0   Аня   25
# 1  Боря   31
# 2  Вика   28

len(df) — номер следующей строки. Способ работает, если индекс идёт подряд от нуля. Если индекс другой, например после фильтрации или set_index, строка с таким номером может уже существовать и перезапишется.

Строка из словаря

1
df.loc[len(df)] = {'name': 'Гоша', 'age': 40}

Порядок ключей не важен, pandas сопоставит их со столбцами.

pd.concat

1
2
new = pd.DataFrame([{'name': 'Дима', 'age': 22}])
df = pd.concat([df, new], ignore_index=True)

ignore_index=True перенумерует строки. Этот способ работает с любым индексом и подходит для добавления сразу нескольких строк.

Почему не работает df.append

Метод append удалили в pandas 2.0. Код из старых ответов выдаст AttributeError: 'DataFrame' object has no attribute 'append'. Замена — pd.concat.

Много строк в цикле

Каждый concat копирует всю таблицу. На тысячах итераций это медленно. Соберите строки в список и создайте таблицу один раз:

1
2
3
4
5
rows = []
for i in range(1000):
    rows.append({'n': i, 'square': i ** 2})

df = pd.DataFrame(rows)

Если таблица уже есть:

1
df = pd.concat([df, pd.DataFrame(rows)], ignore_index=True)

Строка в середину таблицы

Готового метода нет. Таблицу режут на две части и склеивают:

1
2
3
row = pd.DataFrame([{'name': 'Ева', 'age': 33}])
pos = 1
df = pd.concat([df.iloc[:pos], row, df.iloc[pos:]], ignore_index=True)

Добавить столбец

1
2
df['city'] = 'Москва'               # одно значение для всех строк
df['age_next'] = df['age'] + 1      # вычисленный столбец

Pandas и работу с таблицами разбирают в курсе «Python для аналитиков данных».

11 дней назад

Никита Вихров

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845