Как изменить значение в столбце CSV на значение из другого файла - PullRequest
1 голос
/ 08 мая 2019

У меня есть файл CSV для постобработки.Пример моего файла:

serial_number1, name_number_ID1, price1, state1
serial_number2, name_number_ID1, price2, state2
serial_number3, name_number_ID2, price1, state3
serial_number4, name_number_ID3, price1, state4
...

Итак, у меня повторное имя в столбцах.В другом файле у меня есть псевдоним для имени образца, и файл выглядит так:

NAME_NUMBER_ID; Alias; Data; NrOfOfert
name_number_ID1; Name1; XX; YY
name_number_ID2; Name2; XX; YY
name_number_ID3; Name3; XX; YY

Теперь мне нужно изменить NameID в первом файле на Alias ​​из второго файла.

Файл результата будет:

    serial_number1, Name1, price1, state1
    serial_number2, Name1, price2, state2
    serial_number3, Name2, price1, state3
    serial_number4, Name3, price1, state4
    ...

Каков наилучший способ прочитать первый файл (сотни записей) и заменить nameID на соответствующий псевдоним?Должен ли я создать словарь?Иногда у меня слишком много псевдонимов, чтобы сделать это вручную.

Может ли кто-нибудь привести меня к наиболее оптимальному решению?

РЕДАКТИРОВАТЬ: я только что создал словарь из второго файла и использую его:

def.replace({def.iloc[:,1]:dictionary})

Спасибо за ответы, я многому научился.

Ответы [ 2 ]

1 голос
/ 08 мая 2019

Если вы не готовы использовать панды для этого, возможно, вам придется заменить python построчно.Панды действительно созданы для этого, так что это лучший вариант.

Этот пример должен начать изменение, но для его работы потребуются некоторые изменения.

#open all necessary files
with open('infile.csv', 'r') as infile, open('namefile.csv', 'r') as namefile,
    open('outfile.csv', 'w') as outfile:

    #iterate over both input files
    for in_line, name_line in zip(infile, namefile):
        #collect the row's information
        out_ls = in_line.split(', ')
        #collect the name
        name = name_line.split('; ')[1]
        #replace the id with the name
        out_ls[1] = name
        #print out the line
        outfile.write(', '.join(out_ls))           

Если вы используете этокод, следите за тем, чтобы номера строк совпадали (чтобы заголовки не мешали и в одном файле не было больше строк, чем в другом, что вынудило программу завершиться раньше).Эта реализация избегает сохранения целого столбца или файла программой, записывая исправленную часть построчно.Удачи!

1 голос
/ 08 мая 2019

Я бы порекомендовал использовать панд и импортировать read_csv.Импортируйте только нужные вам столбцы, а затем объедините кадры данных.

import pandas as pd
# For selecting cols you can use keys or col names
df1 = pd.read_csv(infile1, usecols=[0,3])
df2 = pd.read_csv(infile2, usecols=[1,2])

# Merge data set 1 and 2
new_df = pd.concat([df1, df2], axis=1, sort=False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...