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

    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
    Ответ написан
    3 комментария
  • Как в Python можно изменить запись в CSV?

    Maksim_64
    @Maksim_64
    Data Analyst
    Нет ничего проще для такой задачи чем использовать pandas.
    Вот сделал игрушечный пример, сначала создаю csv в первой части для демонстрации, потом обновляю любые подсеты данных, при вводе пользователя.
    import pandas as pd
    # Первая часть создание файла
    df = pd.DataFrame({
        'Name':['Petr','Maks','Aleksandr'],
        'Age':[30,40,50],
        'Salary':[500,700,600]
    })
    df.to_csv('data.csv', index=False)
    
    # Вторая часть обновление
    name = input('Введите Имя, чьи данные хотите изменить?  ')
    fields_to_change = input('Какие данные Вы хотите изменить? например Age, Salary: ').split(',')
    data_to_update = {}
    for field in fields_to_change:
        data_to_update[field] = input(f'Введите {field}: ')
    
    df = pd.read_csv('data.csv').set_index('Name')
    df.loc[name, fields_to_change] = data_to_update
    df.to_csv('data.csv')
    print('Спасибо, данные обновлены')

    Вторая часть это непосредственно код который будет обновлять. То есть та часть которая тебя интересует.
    Ответ написан
    2 комментария
  • Как вывести строку из csv файла без лишних символов на python?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну если оставить всю твою логику, то можно просто отфильтровать, пустые строки из результатов которые он находит.
    matching_rows.append([x for x in row if x])
    Ответ написан
    Комментировать
  • Как заполнять csv файл в зависимости от количества данных?

    Maksim_64
    @Maksim_64
    Data Analyst
    А не нужно пытаться из csv файла делать электронную таблицу. У тебя должны быть известны все имена столбцов. И создан csv, со всеми столбцами, а затем ты в него добавляешь записи в которых определенные значения будут None, по скольку значение не спарсено для данного элемента записи.

    для записи в csv используй pandas. Создай датафрейм со всеми возможными столбцами. Затем у тебя есть коллекция с записями, ну например список с кортежами, где каждый кортеж это запись, содержащая None, где данные не спарсены.
    Псевдо код будет такой (индексы в кортеже должны совпадать с индексами в columns)
    data = [('Ivanov','Ivan',None), ('Petrov','Petr',30),...,('Sidorov',None,None)]
    columns = ['name','surname',...'age']
    df = pd.DataFrame(data, columns = columns)
    df.to_csv('result.csv',header=False, mode='a')
    Создаешь фрейм, и добавляешь его новыми строчками в существующий csv файл. А автоматически добавлять столбцы в csv файл не нужно. Если же знать наперед все потенциальные имена столбцов не возможно, что я себе слабо представляю (ты должен знать что ты хочешь спарсить), то используй json (мороки будет много).
    Ответ написан
    4 комментария
  • Как записать Словарь в CSV по СТОЛБЦАМ в Python?

    Maksim_64
    @Maksim_64
    Data Analyst
    в модуле csv есть класс DictWriter.
    Ну я бы использовал pandas потому что проще. Из той структуры данных что у вас есть легко создать dataframe и писать куда захочется хоть в csv, хоть в базу, хоть в excel и т.д.
    предварительно установив pandas
    import pandas as pd
    df = pd.DataFrame(data)
    df.to_csv('file.csv')

    Плюс с этим фреймом можно работать какого только функционала для него нет. И писать куда угодно удобно. И там параметров записи сколько хочешь в методе (to_csv), отрегулировать легко.
    Ответ написан