替换pandas数据框中的单词?

时间:2016-08-27 04:41:33

标签: pandas dataframe

我的数据框内容

    comment
0   abg ko metedarah duit rakyat nak buat belanja ...
1   tutup tv n radio jgn dngar janji bajet 2 dr ta...
2   ya lah ko dah dera rakyat bajet besar untuk ra...
3   oiii kerjaan bn ko org sdr x dh lh kerajaan xd...
4   bertambah lg hutang negara diambil oleh tangan...

将替换为文件中的列表

    word    correction
0   abg     abang
1   n       dan
2   dr      dari
3   ko      kau
4   org     orang

任何可能的方式?

2 个答案:

答案 0 :(得分:1)

您可以考虑在pandas中使用带有str.replace()方法的正则表达式来更改在单词边界(\b)找到的单词的实例,然后替换为更正:

>>> data

                                          comment
0   abg ko metedarah duit rakyat nak buat belanja
1  tutup tv n radio jgn dngar janji bajet 2 dr ta
2  ya lah ko dah dera rakyat bajet besar untuk ra
3  oiii kerjaan bn ko org sdr x dh lh kerajaan xd
4  bertambah lg hutang negara diambil oleh tangan

>>> correction_df

  word correction
0  abg      abang
1    n        dan
2   dr       dari
3   ko        kau
4  org      orang

for word, correction in correction_df.itertuples(index=False,name=None):
    data.comment = data.comment.str.replace(r'\b{0}\b'.format(word),correction)

>>> data

                     comment
0    abang kau metedarah duit rakyat nak buat belanja
1  tutup tv dan radio jgn dngar janji bajet 2 dari ta
2     ya lah kau dah dera rakyat bajet besar untuk ra
3   oiii kerjaan bn kau orang sdr x dh lh kerajaan xd
4      bertambah lg hutang negara diambil oleh tangan

答案 1 :(得分:0)

是否有更好的解决方案,但这里有些脏东西,有效:

comments = ["abg ko metedarah duit rakyat nak buat belanja",
"tutup tv n radio jgn dngar janji bajet 2 dr ta",
"ya lah ko dah dera rakyat bajet besar untuk ra",
"oiii kerjaan bn ko org sdr x dh lh kerajaan xd",
"bertambah lg hutang negara diambil oleh tangan"]

corrections  =
{"abg"  :   "abang",
"n"   :    "dan",
"dr" :      "dari",
"ko"  :     "kau",
"org"  :    "orang",
 }

data = pd.DataFrame(comments)
data.columns = ["comment"]

def correct(w,corrections):
    c =corrections.get(w)
    return c if c else w

def make_corrections(sent,corrections):
    return " ".join((correct(w, corrections) for w in sent.split()))

data.apply(lambda x: make_corrections(x.comment, corrections),axis=1)

代码循环遍历每个单词,并用校正替换它(如果存在)。这需要时间在语料库的长度。