@barboskin93

Почему с помощью Pandas не меняются данные в строке CSV файла?

Создаю CSV файл
df = pd.DataFrame({
    'Имя':['Гарри','Рон','Гермиона','Драко'],
    'Фамилия':['Поттер','Уизли','Грейнджер','Малфой'],
    'Отчество':['Джеймсовович','Артурович','Венделовна','Люциусович'],
    'Организация':['Грифиндор','Грифиндор','Грифиндор','Слизерин'],
    'Рабочий телефон': [4545, 4646, 4747, 4848],
    'Личный телефон': [5555, 5656, 5757, 5858]
})
df.to_csv('directory2.csv', index=False)


Пытаюсь сделать так, что бы появилась возможность изменять данные в строках файла.
name = input('Введите Имя, чьи данные хотите изменить?  ')
fields_to_change = input('Какие данные Вы хотите изменить? например Имя, Фамилия: ').split(',')
data_to_update = {}
for field in fields_to_change:
    # print(field)
    data_to_update[field] = input(f'Введите {field}: ')
    # print(data_to_update)
df = pd.read_csv('directory2.csv').set_index('Имя')
print(df)
df.loc[name, fields_to_change] = data_to_update
df.to_csv('directory2.csv')

Но вместо замены, у меня добавляется еще один заголовок (например имя) и значение для выбранной строки в конец.
  • Вопрос задан
  • 81 просмотр
Решения вопроса 1
Maksim_64
@Maksim_64
Data Analyst
Ну смотри это происходит потому что мы ставим индексом ИМЯ и его же меняем, можно ли это обойти, конечно элементарно. Все оставляешь как есть вот здесь добавляем параметр
df = pd.read_csv('directory2.csv').set_index('Имя', drop=False).rename_axis('_Имя', axis=0)
что бы у нас колонка имя не пропадала, и меняем имя у индекса, что бы он отличался от имени колонки.
ну и при записи в файл индекс не пишем что бы ничего не дублировалось.
df.to_csv('directory2.csv', index=False)

Так будет работать, как ты хочешь. Ну а вообще подумай над созданием колонки которую ты будешь ставить в индекс, что бы она была уникальная.

И будь внимателен при парсинге ввода, там где указываешь имена колонок, если ты введешь колонку которой нет он ее просто добавит новой и все. df.columns должен содержать fields_to_change, по этому может добавочный небольшой защитный код написать придется, что бы например регистры не перепутались, пробелы лишние не оказались, можешь даже проверку ввести на ввод что пользователь ввел существующие колонки. Имена колонок лежат в df.columns
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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