使用pandas字典替换dataframe列中的关键字

时间:2018-05-17 08:30:10

标签: python regex pandas dataframe replace

我有一个包含4列的数据框,其中一列称为action_description,它包含“自由文本”,可以恢复为解决问题而采取的不同操作。

本专栏中的文字有时是错误的,我们有一个字典,用于所有着名的错误字样(例如:REPLCD - > REPLACED,.....)

我想使用python代码替换列中的所有错误字。

这是我使用的代码:

代码:

import sys
import pyspark
import pandas_datareader
import re
import csv
import xlrd
import pandas as pd
import numpy as np
import datetime

from pyspark.context import SparkContext
from pyspark.sql.functions import *
from pandas import DataFrame
from pandas_datareader import data, wb
from pandas import *

xls = ExcelFile("test_doc_2.xls")
df = xls.parse(xls.sheet_names[0])
df.drop(df.columns[[0, 1]],inplace=True,axis=1)
df2 = Series(df.TO_VALUE.values,index=df.FROM_VALUE).to_dict()

xls1 = ExcelFile("Test_Source_New_2.xls")
df1 = xls1.parse(xls1.sheet_names[0])

df1['WORK_PERFORMED_NEW'] = df1['WORK_PERFORMED'].replace(df2, regex=True)

此解决方案有效,但在某些情况下,

在我的字典中:DEF - >延伸,推迟 - > DEFERRED

所以我的解决方案:DEFERED - > DEFERREDERED,它在DEFERED DEFERED中替换了DEF,它与ERED,DEFERRED + ERED连接。

我考虑过使用边界(r“\ b”),但是语法错误!!!

我如何克服这个问题。

提前谢谢。

1 个答案:

答案 0 :(得分:1)

我猜你面临的问题是由于regex = True。如你所说,你有一本字典:

DEF -> DEFERRED, DEFERED -> DEFERRED

因此,当您通过 DEF ERED时,它首先找到 DEF ,并将其替换为 DEFERRED ,然后是 ERED < / strong>即可。所以你会得到:

DEFERED -> DEFERREDERED 

简化:

DEF +ERED -> DEFERRED + ERED -> DEFFEREDERED

如有任何疑问,您可以发表评论。