@Pyden

Как добавить словарь в существующий датафрейм pandas?

Есть датафрейм df . Мне надо добавить в конец этого датафрейма словарь с данными. Словарь имеет точно такие же колонки, как и в df. Но я получаю ошибку AttributeError: 'DataFrame' object has no attribute 'append'

shapka = {'Кадастровый № ОКС':[],'Вид ОКС':[],'Назначение':[],'Адрес ОКС':[],'Площадь':[],'Вид права':[],'ФИО':[],'Номер рег. записи':[]}
df = pd.DataFrame(shapka)

slovar = {'Кадастровый № ОКС': 'тут текст', 'Вид ОКС': 'тут текст', 'Назначение': 'тут текст', 'Адрес ОКС': 'тут текст', 'Площадь': 'тут текст', 'Вид права': 'тут текст', 'ФИО': 'тут текст', 'Номер рег. записи': 'тут текст'}
df = df.append(slovar, ignore_index=True)


Как правильно добавлять словарь к существующему датафрейму?

В справке к pandas указано, что так можно делать:
pandas.core.frame.DataFrame def append(self,
           other: Any,
           ignore_index: bool = False,
           verify_integrity: bool = False,
           sort: bool = False) -> DataFrame
Append rows of other to the end of caller, returning a new object.
Columns in other that are not in the caller are added as new columns.
See Also
concat
General function to concatenate DataFrame or Series objects.
Notes
If a list of dict/series is passed and the keys are all contained in the DataFrame's index, the order of the columns in the resulting DataFrame will be unchanged.
Iteratively appending rows to a DataFrame can be more computationally intensive than a single concatenate. A better solution is to append those rows to a list and then concatenate the list with the original DataFrame all at once.
Examples
>>> df = pd.DataFrame([[1, 2], [3, 4]], columns=list('AB'), index=['x', 'y'])
>>> df
   A  B
x  1  2
y  3  4
>>> df2 = pd.DataFrame([[5, 6], [7, 8]], columns=list('AB'), index=['x', 'y'])
>>> df.append(df2)
   A  B
x  1  2
y  3  4
x  5  6
y  7  8
With ignore_index set to True:
>>> df.append(df2, ignore_index=True)
   A  B
0  1  2
1  3  4
2  5  6
3  7  8
  • Вопрос задан
  • 2121 просмотр
Решения вопроса 1
Maksim_64
@Maksim_64
Data Analyst
Ну во первых append метод запрещен и будет удален, так что его не используем. Если в двух словах то преобразовать во фрейм и конкатенировать, ну а если не в двух то вот.
Сначала разберем как добавить новую строку. Используем метод concat для этого. Откроете документацию посмотрите все довольно просто. В вашим случае немножечко сложнее потому что ваш словарь простой
{key1: value, key2:value}, что бы создать фрейм из словаря он должен быть такого вида some_dict = {'key1':[value],'key2':[value]}. Тогда мы можем просто создать фрейм командой pd.DataFrame(some_dict). Ничего особо переделывать не придется, просто использовать дополнительный метод from_records.
shapka = {'Кадастровый № ОКС':[],'Вид ОКС':[],'Назначение':[],'Адрес ОКС':[],'Площадь':[],'Вид права':[],'ФИО':[],'Номер рег. записи':[]}
df = pd.DataFrame(shapka)

slovar = {'Кадастровый № ОКС': 'тут текст', 'Вид ОКС': 'тут текст', 'Назначение': 'тут текст', 'Адрес ОКС': 'тут текст', 'Площадь': 'тут текст', 'Вид права': 'тут текст', 'ФИО': 'тут текст', 'Номер рег. записи': 'тут текст'}
new_df = pd.concat([df, pd.DataFrame.from_records([slovar])] ,ignore_index=True)


Все вот так все заработает, как вы хотите, добавляйте новую строку к вашему фрейму. Ну а про concat почитаете в документации, что то будет не понятно спросите.

И еще на что хотел бы обратить внимание это метод from_records.
d1 = {'A':1,'B':2}
d2 = {'A':3,'B':4}
df = pd.DataFrame.from_records([d1,d2])
print(df)

То есть нам доступен список словарей, для создания фрейма.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы