【问题标题】:How to Map String in A Dataframe from A Corresponding String List如何从对应的字符串列表映射数据框中的字符串
【发布时间】:2020-06-17 13:40:36
【问题描述】:

假设我有这个带有特定列 Tweet 的数据框 A:

TWEET
-----
kamu ngajak gelut
dtnggu kedatangannya
dia jadi pampir

还有另一个数据框 B,结构如下:

ORIGIN            TRANSFORMED 
-----------------------------
ngajak             mengajak
dtnggu             ditunggu
pamir              vampir

有没有办法将数据框 A 的字符串映射到数据框 B,所以只要有字符串匹配,来自 TRANSFORMED 列的单词将根据 TWEET 列中的 ORIGIN 列替换相应的字符串?我想要的结果:

TWEET
-----
kamu mengajak gelut
ditunggu kedatangannya
dia jadi vampir

任何帮助表示赞赏。谢谢。

【问题讨论】:

标签: python string pandas replace mapping


【解决方案1】:

假设ORIGIN 列具有唯一值


In [88]: bstr = r''' 
    ...: ORIGIN TRANSFORMED 
    ...: ngajak             mengajak 
    ...: dtnggu             ditunggu 
    ...: pamir              vampir'''                                                                                                                                             

In [89]: astr = r''' 
    ...: TWEETS 
    ...: kamu ngajak gelut 
    ...: dtnggu kedatangannya 
    ...: dia jadi pampir'''                                                                                                                                                       

In [90]: dfa = pd.read_table(io.StringIO(astr), sep='\\n', engine='python')                                                                                                       

In [91]: dfb = pd.read_table(io.StringIO(bstr), sep='\\s+')                                                                                                                       

In [92]: def replace(word, lookup_df, search_col, ans_col): 
    ...:     match = lookup_df[search_col] == word 
    ...:     if match.any(): 
    ...:         return lookup_df[match][ans_col].values[0] 
    ...:     else: 
    ...:         return word 
    ...:                                                                                                                                                                          

In [93]: dfa['TWEETS'] = dfa['TWEETS'].apply(lambda row: ' '.join([replace(word, dfb, 'ORIGIN', 'TRANSFORMED') for word in row.split(' ')]))                                      

In [94]: dfa                                                                                                                                                                      
Out[94]: 
                   TWEETS
0     kamu mengajak gelut
1  ditunggu kedatangannya
2         dia jadi pampir

【讨论】:

    【解决方案2】:

    这可能会对你有所帮助。

    我用你的数据为你的场景创建了两个数据框。

    df1:

    data = '''kamu ngajak gelut dtnggu kedatangannya dia jadi pampir'''
    df1 = pd.DataFrame({'TWEET': [data]})
    

    df2:

       ORIGIN TRANSFORMED
    0  ngajak    mengajak
    1  dtnggu    ditunggu
    2  pampir      vampir
    

    代码:

    for or_word in df2['ORIGIN'].values.tolist():
        if any(df1['TWEET'].str.contains(or_word)):
            transformed_word = df2['TRANSFORMED'].iloc[df2.index[df2['ORIGIN'] == or_word].tolist()[0]]
            print(transformed_word)
            df1['TWEET'] = df1['TWEET'].str.replace(or_word, transformed_word)
    

    输出:

    ['kamu mengajak gelut ditunggu kedatangannya dia jadi vampir']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-15
      • 2018-02-24
      • 2019-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多