首页 > 解决方案 > Python - 如何用引用表替换列中的所有匹配文本 - 这需要替换单元格中的多个匹配文本

问题描述

嗨,我对 Python 完全陌生,但希望有人能告诉我一些技巧。

我有一个 csv 参考表,其中包含超过 1000 行的唯一查找值,参考表示例:

|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 中执行此操作。

再次感谢。

标签: pythonexcelpandas

解决方案


您可以将 excel 文件保存为 CSV 以使您的生活更轻松,然后剥离您的文件以仅包含表格而没有任何不必要的信息。

使用 pandas 将 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']]

有关更多信息和更复杂的任务,请访问 pandas documentaion @ https://pandas.pydata.org/

提示:对于大量列,请检查 iloc 函数


推荐阅读