Обнулить совпадающую строку, содержащуюся в одном столбце фрейма данных, если это совпадает с другим столбцом фрейма данных - PullRequest
1 голос
/ 03 октября 2019

Мне нужно сделать скрипт, который читает CSV и удаляет символы, которые появляются в другой ячейке. Т.е.:

пример

В строке 4, в столбце «calle», появится «28011», которые появляются в столбце «cod_postal» «Мне нужно удалить»28011 'из столбца "calle", но оставьте нетронутым

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

РЕДАКТИРОВАТЬ: Да, изображение является примером, У меня есть полный CSV с 2k строк

EDIT2: я пытался что-то вроде этого, но я не могу заставить его работать ..

#-*-coding: latin1 -*-
import csv
import pandas

with open ('C:/trabajos/dani_cliente.csv') as csvfile:
    readcsv = csv.reader (csvfile, delimiter = ';')
    for row in readcsv:
        df ['cod_postal'] = np.where(df["cod_postal"]) < threshold, 
0,alt_value)
        print (row)    

EDIT 3: пробовать это тоже, можетполучить на работу, но только для указанного символа, и мне нужно было бы каждый "cod_postal" в CSV

#-*-coding: latin1 -*-

with open("C:/trabajos/extraccion_copia2.csv", 'r') as infile, \
     open("C:/trabajos/dani_cliente.test.csv", 'w') as outfile:


   # for row in infile
    #readcsv = csv.reader(infile, delimiter=';')
    data = infile.read()
    data = data.replace("28011", " ")
    outfile.write(data)

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

Traceback (последний вызов был последним): файл "C: /Users/dalonso/PycharmProjects/untitled/switchtest.py", строка 18, в файле data = infile.read (), файл "C: \ Users \ dalonso \ AppData \ Local\ Programs \ Python \ Python37 \ lib \ encodings \ cp1252.py ", строка 23, в декодировании, возвращает codecs.charmap_decode (input, self.errors, decoding_table) [0] UnicodeDecodeError: кодек 'charmap' не может декодировать байт 0x90 в позиции 577860: отображение символов в неопределенное значение

1 Ответ

0 голосов
/ 03 октября 2019

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

df.loc[4,'cod_postal'] = 0
#if you want, can use NaN, but suggest just keeping 0. 

или

df['cod_postal].iloc[4] = 0

Если есть какое-то конкретное указание, используйте np. где () или pd.where ()

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.where.html

np.where(condition, true_val, false_val) 
np.where(condition, true_val) # or if you want untouched in else condition

df['cod_postal'] = np.where(df["cod_postal"] < threshold, 0, alt_value)

в следующий раз, когда вы спросите, введите фрейм данных / ваш код в вашем вопросе

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