【问题标题】:Pandas: replace values in stringsPandas:替换字符串中的值
【发布时间】:2016-08-10 09:28:53
【问题描述】:

我有数据框,我尝试从其他 df 替换它

我用:

df['term_code'] = df.search_term.map(rep_term.set_index('search_term')['code_action'])

但我得到一个错误:

File "C:/Users/����� �����������/Desktop/projects/find_time_before_buy/graph (2).py", line 36, in <module>
df['term_code'] = df.search_term.map(rep_term.set_index('search_term')['code_action'])
 File "C:\Python27\lib\site-packages\pandas\core\series.py", line 2101, in map
indexer = arg.index.get_indexer(values)
 File "C:\Python27\lib\site-packages\pandas\indexes\base.py", line 2082, in get_indexer
   raise InvalidIndexError('Reindexing only valid with uniquely'
pandas.indexes.base.InvalidIndexError: Reindexing only valid with uniquely valued Index objects

我应该改变什么? search_term 在哪里

729948                               None  
729949                               None  
729950                               None  
729951  пансионат джемете отдых 2016 цены  
729952                               None  
729953                               None  
729954                               купить телефон  
729955                               None  
729956                               вк  
729957                               None  
729958                               яндекс  

rep_term 看起来像

search_term code_action
авито   6
вк  9
яндекс  12
мтс 7
связной 8
ситилинк    8

【问题讨论】:

    标签: python string pandas dataframe duplicates


    【解决方案1】:

    DataFramerep_termsearch_term 中存在重复项问题。

    我模拟它:

    import pandas as pd
    
    df = pd.DataFrame({'search_term':[1,2,3]})
    
    print (df)
       search_term
    0            1
    1            2
    2            3
    

    对于search_term 中的1 值,您在code_action 中有2 值:

    rep_term = pd.DataFrame({'search_term':[1,2,1], 'code_action':['ss','dd','gg']})
    print (rep_term)
      code_action  search_term
    0          ss            1
    1          dd            2
    2          gg            1
    
    
    df['term_code'] = df.search_term.map(rep_term.set_index('search_term')['code_action'])
    print (df)
    #InvalidIndexError: Reindexing only valid with uniquely valued Index objects
    

    所以首先通过duplicated 识别重复值的行:

    print (rep_term[rep_term.duplicated(subset=['search_term'], keep=False)])
      code_action  search_term
    0          ss            1
    2          gg            1
    

    然后您可以通过 drop_duplicates 保留最后一个或第一个值来删除重复性

    rep_term1 = rep_term.drop_duplicates(subset=['search_term'], keep='first')
    print (rep_term1)
      code_action  search_term
    0          ss            1
    1          dd            2
    
    rep_term2 = rep_term.drop_duplicates(subset=['search_term'], keep='last')
    print (rep_term2)
      code_action  search_term
    1          dd            2
    2          gg            1
    

    【讨论】:

    • 我应该重命名列吗?当此列的名称为另一个时,它也返回此错误。
    • 等一下,我补充一下你能做些什么来回答。
    猜你喜欢
    • 1970-01-01
    • 2022-01-03
    • 2016-11-28
    • 2019-10-01
    • 2018-03-26
    • 2018-10-20
    相关资源
    最近更新 更多