Как добавить / обновить новые значения в строки существующего файла CSV из нового файла CSV в виде нового столбца в python, используя pandas или что-то еще - PullRequest
0 голосов
/ 05 августа 2020

Старый файл

Имя, 2015

Джек, 205

Джилл, 215

Джой, 369

Новый файл

Имя, 2016

Хилл, 289

Джилл, 501

Рауф, 631

Джек, 520

Кей, 236

Джой, 615

Вот что Я хочу:

Имя, 2015, 2016

Джек, 205, 520

Джилл, 215, 501

Радость, 369, 615

Хилл`` 289

Рауф`` 631

Кей`` 236

Ответы [ 3 ]

0 голосов
/ 05 августа 2020

мне потребовалось время, чтобы разобраться с этим.

Прежде всего, вы извлекаете значения файлов:

    import csv
    
    with open('old.csv', 'r') as old_file:
        old_csv = [row for row in csv.reader(old_file)]
    with open('new.csv', 'r') as new_file:
        new_csv = [row for row in csv.reader(new_file)]

затем нам нужно получить имена нового файла :

    new_names = [row[0] for row in new_csv]

тогда мы можем перебирать все старые строки, чтобы мы могли изменить новый файл и обновить значения

    for name, number in old_csv:
        index = None

        #Check if the name is already in the file
        if name in new_names:
            index = new_names.index(name)
            new_csv[index].append(number)
        
        #If not, add the new name with the number. This is maybe not neccessay
        else:
            new_entry = [name, number]
            new_csv.append(new_entry)   

После объединения списков мы записываем новый файл

    with open('merged_file.csv', 'w') as merge_file:
        merger = csv.writer(merge_file)
        for row in new_csv:
            merger.writerow(row)

Файл выглядит так:

    Name, 2016, 2015
    Hill, 289
    Jill, 501, 215
    Rauf, 631
    Jack, 520, 205
    Kay, 236
    Joy, 615, 369

не был уверен, является ли «имя» заголовком или нет. Это нужно добавить в csv reader

0 голосов
/ 05 августа 2020

Спасибо всем за ответ

Я нашел способ следующим образом:

import pandas as pd

old_file = pd.read_csv('old file.csv')
new_file = pd.read_csv('new file.csv')

old_file = old_file[old_file['Name'].isna() == False]
new_file = new_file[new_file['Name'].isna() == False]

data_combined = pd.merge(old_file, new_file, left_on='Name', right_on='Name', how='outer')
print(data_combined.fillna(0).convert_dtypes())

Это дает желаемый результат:

   Name  2015  2016
0  Jack   205   520
1  Jill   215   501
2   Joy   369   615
3  Hill     0   289
4  Rauf     0   631
5   Kay     0   236
0 голосов
/ 05 августа 2020

Вот сообщение о том, как создать новый столбец в Pandas DataFrame на основе существующих столбцов: https://www.geeksforgeeks.org/create-a-new-column-in-pandas-dataframe-based-on-the-existing-columns/

Это поможет, если вы объясните свою ошибку в следующей схеме:

  1. опубликуйте свой код
  2. опубликуйте свою ошибку или код возврата
  3. опубликуйте то, что вы ожидали
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...