2016-08-10 3 views
3

내가 데이터 프레임을 가지고 있고이팬더 : 문자열 값을 대체

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 

답변

4

처럼 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 

1를 들어 search_term 당신이 code_action2 값이 :

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에 의해 vaues 중복되는 행 식별 :

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 
+0

에 의해 유지 마지막 또는 첫번째 값 이중성을 드롭 할 수 있습니까? 이 열의 이름이 다른 경우이 오류도 반환되었습니다. – ldevyataykina

+0

잠시만 기다려주세요, 당신이 대답하기 위해 할 수있는 것을 더합니다. – jezrael