Добавление пустой строки в DataFrame с помощью pandas
Я пытаюсь добавить пустую строку в конец DataFrame, но у меня не получается. Я пытаюсь разобраться, как работает функция append
в pandas, и всё равно не понимаю.
Вот мой код:
import pandas as pd
excel_names = ["ARMANI+EMPORIO+AR0143-book.xlsx"]
excels = [pd.ExcelFile(name) for name in excel_names]
frames = [x.parse(x.sheet_names[0], header=None, index_col=None).dropna(how='all') for x in excels]
for f in frames:
f.append(0, float('NaN'))
f.append(2, float('NaN'))
В моем DataFrame две колонки и произвольное количество строк.
При выводе print(f)
в цикле for я получаю следующий результат:
0 1
0 Brand Name Emporio Armani
2 Model number AR0143
4 Part Number AR0143
6 Item Shape Rectangular
8 Dial Window Material Type Mineral
10 Display Type Analogue
12 Clasp Type Buckle
14 Case Material Stainless steel
16 Case Diameter 31 millimetres
18 Band Material Leather
20 Band Length Women's Standard
22 Band Colour Black
24 Dial Colour Black
26 Special Features second-hand
28 Movement Quartz
Как я могу успешно добавить пустую строку в конец DataFrame?
5 ответ(ов)
Если вы хотите добавить новую pandas.Series
в pandas.DataFrame
с помощью метода append()
, вы можете сделать это следующим образом:
Если вы хотите указать имя (или "индекс") для новой строки, используйте:
df.append(pandas.Series(name='ИмяНовойСтроки'))
Если вам не нужно называть новую строку, используйте:
df.append(pandas.Series(), ignore_index=True)
где df
— это ваш объект pandas.DataFrame
.
Не забудьте, что метод append()
возвращает новый DataFrame и не изменяет исходный.
Вы можете добавить пустую строку в DataFrame, добавив серию следующим образом. Я предполагаю, что под "пустым" вы имеете в виду строку, содержащую только значения "NaN".
Сначала создайте объект Series с NaN. Не забудьте указать столбцы при определении объекта 'Series' в параметре -index. Затем вы сможете добавить его в DataFrame. Надеюсь, это поможет!
from numpy import nan as Nan
import pandas as pd
>>> df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
... 'B': ['B0', 'B1', 'B2', 'B3'],
... 'C': ['C0', 'C1', 'C2', 'C3'],
... 'D': ['D0', 'D1', 'D2', 'D3']},
... index=[0, 1, 2, 3])
>>> s2 = pd.Series([Nan, Nan, Nan, Nan], index=['A', 'B', 'C', 'D'])
>>> result = df1.append(s2)
>>> result
A B C D
0 A0 B0 C0 D0
1 A1 B1 C1 D1
2 A2 B2 C2 D2
3 A3 B3 C3 D3
4 NaN NaN NaN NaN
Вы можете добавить новую серию в DataFrame и одновременно задать ей имя. Это имя будет индексом новой строки, а все значения в ней автоматически будут NaN. Пример кода выглядит следующим образом:
df.append(pd.Series(name='Afterthought'))
Однако стоит отметить, что метод append
устарел в последних версиях pandas, и рекомендуется использовать pd.concat
. Ниже приведён аналогичный код с использованием pd.concat
:
df = pd.concat([df, pd.Series(name='Afterthought')])
Таким образом, вы сможете добавить новую серию с заданным именем, и все значения в ней будут заполнены NaN.
Если предположить, что df
— это ваш DataFrame, вы можете добавить дополнительную строку с NaN значениями следующим образом:
df_prime = pd.concat([df, pd.DataFrame([[np.nan] * df.shape[1]], columns=df.columns)], ignore_index=True)
В результате df_prime
будет равен df
, но с добавленной последней строкой, содержащей NaN.
Однако стоит отметить, что pd.concat
может работать медленно. Если вам нужно выполнять эту операцию в цикле, лучше избегать его использования. В этом случае, при условии, что ваш индекс инкрементален, вы можете использовать следующий код:
df.loc[df.iloc[-1].name + 1, :] = np.nan
Этот способ более эффективен и позволяет избежать накладных расходов, связанных с конкатенацией.
Чтобы добавить пустую строку в DataFrame и заполнить выбранные ячейки, можно воспользоваться следующими шагами:
Сначала создайте пустой DataFrame без строк, только с колонками a
и b
:
import pandas as pd
col_names = ["a", "b"]
df = pd.DataFrame(columns=col_names)
Теперь добавьте пустую строку в конце DataFrame:
df = df.append(pd.Series(), ignore_index=True)
Затем заполните пустую ячейку в конце (len(df)-1
) DataFrame в колонке a
:
df.loc[[len(df)-1], 'a'] = 123
Результат будет следующим:
a b
0 123 NaN
Также можно итерировать по строкам и заполнять ячейки. Например, если вы хотите добавить сразу несколько пустых строк и заполнить их:
col_names = ["a", "b"]
df = pd.DataFrame(columns=col_names)
for x in range(0, 5):
df = df.append(pd.Series(), ignore_index=True)
df.loc[[len(df)-1], 'a'] = 123
Результат в этом случае будет таким:
a b
0 123 NaN
1 123 NaN
2 123 NaN
3 123 NaN
4 123 NaN
Используя данный подход, вы сможете легко добавлять пустые строки в DataFrame и заполнять нужные ячейки.
Как создать тестовые и обучающие выборки из одного DataFrame с помощью pandas?
Как изменить порядок столбцов в DataFrame?
Установить значение для конкретной ячейки в DataFrame pandas с использованием индекса
Доступ к атрибутам на литералах работает для всех типов, кроме `int`; почему?
Получить все ключи из объекта GroupBy в Pandas