Как улучшить мой код, который удаляет строку в pandas

#python-3.x #pandas #csv

#python-3.x #pandas #csv

Вопрос:

Я начинаю с test.csv, который содержит:

 Name,Date,Weight
Jonny,03-08-2019,100
Sally,03-08-2019,120
Bobby,03-08-2019,200
  

С помощью df = pd.read_csv('test.csv', index_col=None, header='infer') я загружаю test.csv во фрейм данных, который выдает:

     Name        Date  Weight
0  Jonny  03-08-2019     100
1  Sally  03-08-2019     120
2  Bobby  03-08-2019     200
  

Затем я создал функцию для удаления строки, выбранной пользователем. Но я делаю это, разделяя фрейм данных в выбранной строке, а затем добавляя 2 фрейма данных обратно вместе. Есть ли более простой способ сделать это? Я посмотрел на df.drop (), но не смог удалить всю строку.

 def delete_entry(df):
    num_to_delete = int(input("Delete which row? "))

    first_rows_to_keep = df.iloc[:num_to_delete]
    last_rows_to_keep = df.iloc[num_to_delete 1:]
    new_df = first_rows_to_keep.append(last_rows_to_keep)
    with open('test.csv', 'w') as f:
        new_df.to_csv(f, index=False)
  

Ищу способы улучшить свой код. Спасибо!

Ответ №1:

Вы можете использовать .drop() метод pandas df, используя соответствующие аргументы для удаления указанных строк на месте.

Например, чтобы удалить заданную строку:

 df.drop(num_to_delete, axis=0, inplace=True)
  

где второй аргумент (‘axis’) обозначает удаление строк (в отличие от столбцов), а последний аргумент указывает операцию, которая должна быть выполнена на месте.

Вы также могли бы рассмотреть .set_index метод. Это, например, дало бы вам возможность удалять строки в зависимости от значения данного столбца (т. Е. Удалять все с именем Бобби).

Комментарии:

1. Нет проблем, вы также можете посмотреть на метод .set_index(). Это позволило бы легко удалять строки с определенными значениями.

Ответ №2:

В вашем случае удаление столбцов на основе индекса имеет наибольший смысл.

 df.drop(df.index[2])
  

При этом будет удалена третья строка, содержащая данные о Бобби.

Комментарии:

1. Это приводит к IndexError: index 2 is out of bounds for axis 0 with size 2

2. Я вижу. Да, это произошло потому, что вы выводите свои заголовки. Мой плохой, пожалуйста, попробуйте с df.drop(df.index[1])