Функция Pandas DataFrame append() объединяет строки с другим объектом DataFrame. Функция append() присутствует в библиотеке Pandas, которая является отличной библиотекой, которая позволяет пользователю эффективно и действенно выполнять анализ данных.
- Что такое функция DataFrame append() в Pandas?
- Синтаксис
- Параметры
- Возвращаемое значение
- Примеры программ с DataFrame append()
- Повышение ValueError для повторяющихся индексов
- Добавление объектов DataFrame с несовпадающими столбцами
- Вставка и удаление строк в Pandas DataFrame
- Добавление строк в pd.DataFrame с использованием цикла for
- Заключение
Что такое функция DataFrame append() в Pandas?
Метод Pandas DataFrame append() используется в Python для добавления строк одного DataFrame в конец другого. После добавления он возвращает новый объект.
Функция append() не изменяет исходный DataFrame. Столбцы, отсутствующие в первом фрейме данных, добавляются во второй, а новые ячейки заполняются значением NaN. Функция DataFrame append() возвращает новый объект DataFrame и не изменяет исходные объекты. Вам нужно назначить обратно добавленный DataFrame.
Синтаксис
|
1 |
DataFrame.append(other, ignore_index=False, verify_integrity=False, sort=None) |
Параметры
Функция append() имеет следующие параметры:
- other: это DataFrame или серия.
- ignore_index: если этот параметр имеет значение true, то не используйте метки индекса.
- verify_integrity: это также логическое значение, и по умолчанию оно равно false. Если это правда, он вызывает ValueError при создании индекса с дубликатами.
- sort: сортирует все столбцы, если столбцы self и other не выровнены.
Возвращаемое значение
Функция df.append() возвращает добавленный DataFrame.
Примеры программ с DataFrame append()
- Напишем программу, показывающую работу метода append() в Python.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
import pandas as pd data_set1 = { 'Name': ['Rohit', 'Mohit', 'Sohit', 'Arun', 'Shubh'], 'Roll no': ['01', '02', '03', '04', '05'], 'maths': ['93', '63', '74', '94', '83'], 'science': ['88', '55', '66', '94', '35'], 'english': ['93', '74', '84', '92', '87']} data_set2 = { 'Name': ['Karan', 'Rishu', 'Swetank', 'Rishabh', 'Shuvam'], 'Roll no': ['06', '07', '08', '09', '10'], 'maths': ['95', '62', '64', '14', '63'], 'science': ['58', '59', '86', '74', '55'], 'english': ['96', '77', '89', '42', '87']} # Changing the above dictionary into dataframe df1 = pd.DataFrame(data_set1) df2 = pd.DataFrame(data_set2) print("df1:\n", df1, "\n\ndf2:\n", df2) print("\nAppended Dataframe:\n") print(df1.append(df2)) |
Выход:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
df1: Name Roll no maths science english 0 Rohit 01 93 88 93 1 Mohit 02 63 55 74 2 Sohit 03 74 66 84 3 Arun 04 94 94 92 4 Shubh 05 83 35 87 df2: Name Roll no maths science english 0 Karan 06 95 58 96 1 Rishu 07 62 59 77 2 Swetank 08 64 86 89 3 Rishabh 09 14 74 42 4 Shuvam 10 63 55 87 Appended Dataframe: Name Roll no maths science english 0 Rohit 01 93 88 93 1 Mohit 02 63 55 74 2 Sohit 03 74 66 84 3 Arun 04 94 94 92 4 Shubh 05 83 35 87 0 Karan 06 95 58 96 1 Rishu 07 62 59 77 2 Swetank 08 64 86 89 3 Rishabh 09 14 74 42 4 Shuvam 10 63 55 87 |
В приведенном выше примере мы создали два фрейма данных. Затем мы использовали функцию append() для добавления данных обоих DataFrames, а затем распечатали объединенные данные.
- Добавим данные двух таких фреймов данных, к которым добавлен фрейм данных с некоторыми значениями NaN.
|
1 2 3 4 5 6 7 |
import pandas as pd dataframe1 = pd.DataFrame({"Col1": [1, 2, 3], "Col2": [4, 5, 6]}) dataframe2 = pd.DataFrame({"Col1": [1, 2, 3, 4], "Col2": [ 5, 6, 7, 8], "Col3": [3, 5, 6, 7]}) dataframe3 = dataframe1.append(dataframe2, ignore_index=True, sort=False) print(dataframe3) |
Выход:
|
1 2 3 4 5 6 7 8 |
Col1 Col2 Col3 0 1 4 NaN 1 2 5 NaN 2 3 6 NaN 3 1 5 3.0 4 2 6 5.0 5 3 7 6.0 6 4 8 7.0 |
Здесь мы создали два фрейма данных. В первом DataFrame у нас есть 2 столбца, во втором 3 столбца.
Следовательно, когда мы добавляем, значения столбца 3 будут NaN для первых нескольких строк, поскольку значения для столбца 3 отсутствуют в первом фрейме данных.
Повышение ValueError для повторяющихся индексов
Мы можем передать verify_integrity=True, чтобы поднять ValueError, если в двух объектах DataFrame есть повторяющиеся индексы.
|
1 2 3 4 5 6 |
import pandas as pd df1 = pd.DataFrame({'Name': ['Krunal', 'Ankit'], 'ID': [11, 21]}) df2 = pd.DataFrame({'Name': ['Niva', 'Mansi'], 'ID': [19, 46]}) df3 = df1.append(df2, verify_integrity=True) |
Выход:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Traceback(most recent call last): File "app.py", line 6, in <module> df3 = df1.append(df2, verify_integrity=True) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pandas/core/frame.py", line 7081, in append return concat( File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pandas/core/reshape/concat.py", line 271, in concat op = _Concatenator( File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pandas/core/reshape/concat.py", line 452, in __init__ self.new_axes = self._get_new_axes() File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pandas/core/reshape/concat.py", line 515, in _get_new_axes return [ File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pandas/core/reshape/concat.py", line 516, in <listcomp> self._get_concat_axis() if i == self.axis else self._get_comb_axis(i) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pandas/core/reshape/concat.py", line 572, in _get_concat_axis self._maybe_check_integrity(concat_axis) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pandas/core/reshape/concat.py", line 580, in _maybe_check_integrity raise ValueError( ValueError: Indexes have overlapping values: Int64Index([0, 1], dtype='int64') |
В выводе видно ValueError: индексы имеют перекрывающиеся значения: Int64Index([0, 1], dtype=’int64′) был поднят.
Теперь давайте посмотрим на другой пример, где у нас нет повторяющихся индексов.
|
1 2 3 4 5 6 7 |
import pandas as pd dataframe1 = pd.DataFrame({"Col1": [1, 2, 3], "Col2": [4, 5, 6]}) dataframe2 = pd.DataFrame({"Col1": [7, 8, 9], "Col2": [10, 11, 12]}) dataframe3 = dataframe1.append(dataframe2, ignore_index=True, sort=False) print(dataframe3) |
Выход:
|
1 2 3 4 5 6 7 |
Col1 Col2 0 1 4 1 2 5 2 3 6 3 7 10 4 8 11 5 9 12 |
Вы можете видеть, что значения col1 и col2 объединены в dataframe3.
Добавление объектов DataFrame с несовпадающими столбцами
|
1 2 3 4 5 6 7 8 |
import pandas as pd df1 = pd.DataFrame({'Name': ['Krunal', 'Simpson'], 'ID': [1, 2]}) df2 = pd.DataFrame({'Name': ['Krunal', 'Homer'], 'ID': [ 3, 4], 'Role': ['MD', 'CTO']}) df3 = df1.append(df2, sort=False) print(df3) |
Выход:
|
1 2 3 4 5 |
Name ID Role 0 Krunal 1 NaN 1 Simpson 2 NaN 0 Krunal 3 MD 1 Homer 4 CTO |
Мы явно передаем параметр sort=False, чтобы избежать сортировки столбцов и игнорировать FutureWarning. Если вы не передадите параметр sort=False, выходные данные будут содержать следующее предупреждающее сообщение.
|
1 2 3 4 5 6 |
FutureWarning: Sorting because the non-concatenation axis is not aligned. A future version of pandas will change to not sort by default. To accept the future behavior, pass 'sort=False'. To retain the current behavior and silence the warning, pass 'sort=True'. |
Что если мы передаем sort=True.
|
1 2 3 4 5 6 7 8 |
import pandas as pd df1 = pd.DataFrame({'Name': ['Krunal', 'Simpson'], 'ID': [1, 2]}) df2 = pd.DataFrame({'Name': ['Krunal', 'Homer'], 'ID': [ 3, 4], 'Role': ['MD', 'CTO']}) df3 = df1.append(df2, sort=True) print(df3) |
Выход:
|
1 2 3 4 5 |
ID Name Role 0 1 Krunal NaN 1 2 Simpson NaN 0 3 Krunal MD 1 4 Homer CTO |
Обратите внимание, что столбцы в результирующем объекте DataFrame отсортированы. Обратите внимание, что эта функция устарела и будет удалена из будущих выпусков.
Вставка и удаление строк в Pandas DataFrame
Как мы видели, вы можете добавить john в качестве новой строки в конец df с помощью метода .append().
Давайте создадим DataFrame и серию и добавим эту серию в DataFrame, используя метод append().
|
1 2 3 4 5 6 7 |
import pandas as pd df = pd.DataFrame({'Name': ['Krunal', 'Simpson'], 'ID': [1, 2]}) series = pd.Series(data={'Name': 'Elsa', 'ID': 21}) df2 = df.append(series, ignore_index=True) print(df2) |
Выход:
|
1 2 3 4 |
Name ID 0 Krunal 1 1 Simpson 2 2 Elsa 21 |
Здесь .append() возвращает Pandas DataFrame с добавленной новой строкой. Обратите внимание, как Pandas использует атрибуты series.Name и series.ID, которые являются значениями Elsa и 21, чтобы указать метку для новой строки.
Вот и все. Мы добавили новую строку в DataFrame одним вызовом .append() и можем удалить ее одним вызовом .drop().
Добавление строк в pd.DataFrame с использованием цикла for
Добавление строк в pandas.DataFrame с помощью цикла for использует его для перебора списка строк, что в конечном итоге приводит к их добавлению в DataFrame.
Внутри цикла for:
- Объедините имена столбцов в качестве ключей с данными столбцов в качестве значений, используя zip(ключи, значения).
- Создайте словарь с заархивированным итератором, используя dict(zip).
- Сохраните созданный словарь в списке.
Затем добавьте список словарей с именем data в существующий DataFrame, используя pandas.Dataframe.append(data, ignore_index=None). Установите ignore_index как True, чтобы сохранить индексы DataFrame.
См. следующий код.
|
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, 'B': 2, 'C': 3}, index=[0]) print(df) columns = list(df) data = [] for i in range(4, 10, 3): values = [i, i+1, i+2] zipped = zip(columns, values) a_dictionary = dict(zipped) data.append(a_dictionary) print('After appending rows using for loop:') df = df.append(data, True) print(df) |
Выход:
|
1 2 3 4 5 6 7 |
A B C 0 1 2 3 After appending rows using for loop: A B C 0 1 2 3 1 4 5 6 2 7 8 9 |
В этом примере сначала мы создали DataFrame и распечатали его. Затем мы получили столбцы этого DataFrame, используя метод list(). И, наконец, я определил пустой список.
Внутри цикла for сначала мы создаем список из 3 значений, который увеличивается на 1. Затем мы создаем итератор, а затем преобразуем его в словарь с помощью метода dict(), а затем добавляем данные в список.
Затем я добавил эти данные с помощью функции df.append() в DataFrame. Вы можете видеть, что мы добавили строки с индексами 1 и 2. Мы добавили две строки в существующий DataFrame, используя функцию range(), цикл for, функцию zip(), функцию dict(), функцию list append() и функцию df.append().
Но этот подход не рекомендуется для добавления DataFrame, поскольку он занимает больше времени.
Заключение

В этом руководстве мы увидели, как добавить один DataFrame в другой, как добавить данные, строки и данные с помощью цикла for.
