Python - Как заменить весь соответствующий текст в столбце ссылочной таблицей - что требует замены нескольких совпадающих текстов в ячейке - PullRequest
0 голосов
/ 31 октября 2019

Привет, я совершенно новичок в Python, но надеюсь, что кто-то может показать мне веревки.

У меня есть справочная таблица csv, которая содержит более 1000 строк с уникальными значениями Find, пример справочной таблицы:

|Find          |Replace     |
------------------------------
|D2-D32-dog    |Brown       |
|CJ-E4-cat     |Yellow      |
|MG3-K454-bird |Red         |

Мне нужно найти и заменить текст в другом CSV-файле. Пример столбца в другом файле, который мне нужно найти и заменить (более 2000 строк):

|Pets                                  |
----------------------------------------
|D2-D32-dog                            |
|CJ-E4-cat, D2-D32-dog                 |
|MG3-K454-bird, D2-D32-dog, CJ-E4-cat  |
|T2- M45 Pig                           |
|CJ-E4-cat, D2-D32-dog                 |

Мне нужно, чтобы Python нашел и заменил, возвращая следующее, и, если нет ссылки, возвращает оригиналзначение:

|Expected output    |
---------------------
|Brown              |
|Yellow, Brown      |
|Red, Brown, Yellow |
|T2- M45 Pig        |
|Yellow, Brown      |

Заранее благодарю.

К вашему сведению - у меня нет опыта программирования, обычно я использую Excel, но мне сказали, что Python сможет этого добиться. Так что я попробовал добиться этого, надеясь достичь вышесказанного - но он возвращает неверную синтаксическую ошибку ...

import pandas as pd

dfRef1 = pd.read_csv(r'C:\Users\Downloads\Lookup.csv')
#File of Find and Replace Table

df= pd.read_csv(r'C:\Users\Downloads\Data.csv')
#File that contains text I want to replace

dfCol = df['Pets'].tolist()
#converting Pets column to list from Data.csv file 

for x in dfCol:
    Split = str(x).split(',')
#asking python to look at each element within row to find and replace

newlist=[]
for index,refRow in dfRef1.iteritems():
     newRow = []
     for i in Split:
              if i == refRow['Find']:
              newRow.append(refRow['Replace']
              else
              newRow.append(refRow['Find'])
              newlist.append(newRow)
    newlist

#if match found replace, else return original text
#When run, the code is Returning - SyntaxError: invalid syntax
#I've also noticed that the dfRef1 dtype: object

Я даже на правильном пути? Любой совет с благодарностью. Я понимаю концепцию Excel VLookup, однако, поскольку значение ячейки содержит несколько элементов поиска, которые мне нужно заменить в одной и той же ячейке, я не могу сделать это в Excel.

Еще раз спасибо.

1 Ответ

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

Вы можете сохранить файл Excel в формате CSV, чтобы упростить свою жизнь, а затем раздеть файл, чтобы он содержал только таблицу без лишней информации.

загрузить файл CSV в python с помощью панд:

import pandas as pd
df_table1 = pd.read_csv("file/path/filename.csv")
df_table2 = pd.read_csv("file/path/other_filename.csv")

df_table1[['wanted_to_be_replaced_col_name']] = df_table2[['wanted_col_to_copy']]

для получения дополнительной информации и более сложного задания перейдите в документацию панд @ https://pandas.pydata.org/

подсказка: для большого количества столбцов проверьте функцию iloc

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