python - 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 中执行此操作。
再次感谢。
解决方案
您可以将 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 函数
推荐阅读
- c# - 谁字段未更新 c# 多米诺日历创建
- python-3.x - 清除 tkinter 画布的问题
- qemu - 如何检测 AVX512 指令在 Qemu 上执行?
- mysql - 使用 Mysql 获取所有重复的术语的名称
- javascript - 如何使用 d3 从字典中创建分组条形图?
- reactjs - Material UI 抽屉如何根据路由器更改主目录?
- java - Gradle:一次运行2个Jar任务只制作一个jar文件
- matlab - 如何在 scilab 的矩阵中保存前 4 个最大数字的索引
- php - PHP Float val 和 double 在我的服务器上无法正常工作
- javascript - 我如何通过这个算法挑战?