2015-07-21 3 views
3
u'가' u'나'  
0  
1 
... 


     A  B 
0 
1 
... 

Было два кадра данных панд, как указано выше, которые назывались «слева», «справа». и я попытался объединить, как показано ниже.Ошибка слияния ключа (имя столбца в Юникоде)

result = pandas.merge(left, right, how='left', left_on=[u'가'], right_on=['A']) 

Но, к сожалению, произошла ошибка. Кажется, pandas merge left (right) _on = key Функция не может распознать имя столбца Unicode.

File "?.py", line ?, in merger 
    pandas.merge(left, right, how='left', left_on=[u'가'], right_on=['A']) 
    File "C:\Anaconda\lib\site-packages\pandas\tools\merge.py", line 37, in merge 
copy=copy) 
    File "C:\Anaconda\lib\site-packages\pandas\tools\merge.py", line 183, in __init__ 
self.join_names) = self._get_merge_keys() 
    File "C:\Anaconda\lib\site-packages\pandas\tools\merge.py", line 352, in _get_merge_keys 
left_keys.append(left[lk].values) 
    File "C:\Anaconda\lib\site-packages\pandas\core\frame.py", line 1797, in __getitem__ 
return self._getitem_column(key) 
    File "C:\Anaconda\lib\site-packages\pandas\core\frame.py", line 1804, in _getitem_column 
return self._get_item_cache(key) 
    File "C:\Anaconda\lib\site-packages\pandas\core\generic.py", line 1084, in _get_item_cache 
values = self._data.get(item) 
    File "C:\Anaconda\lib\site-packages\pandas\core\internals.py", line 2851, in get 
loc = self.items.get_loc(item) 
    File "C:\Anaconda\lib\site-packages\pandas\core\index.py", line 1572, in get_loc 
return self._engine.get_loc(_values_from_object(key)) 
    File "pandas\index.pyx", line 134, in pandas.index.IndexEngine.get_loc (pandas\index.c:3824) 
    File "pandas\index.pyx", line 154, in pandas.index.IndexEngine.get_loc (pandas\index.c:3704) 
    File "pandas\hashtable.pyx", line 686, in pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:12280) 
    File "pandas\hashtable.pyx", line 694, in pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:12231) 
KeyError: u'\uac00' 

Произошел ли такой случай раньше? Если да, сообщите мне и дайте мне свои советы.

+1

Просто из любопытства выполняется следующая работа: 'result = pandas.merge (слева, справа, как = 'left', left_on = left.columns [0], right_on = right.columns [0])'? – EdChum

+0

Ваши права. Извините за путаницу всех. Мне это показалось, но это не проблема Юникода. Просто из-за того, что я попытался _merge_ сразу после _groupby_. http://stackoverflow.com/a/24980809/3054161 – su79eu7k

+0

Пожалуйста, ответьте и согласитесь с тем, чтобы этот вопрос не остался без ответа, спасибо – EdChum

ответ

1

Извините за недоразумение всех. Мне это показалось, но это не проблема Юникода. Это просто из-за того, что я попытался объединиться сразу после groupby. подобный this.

По умолчанию, групповой вывод имеет столбцы группировки как знаки, а не столбцы, поэтому слияние происходит с ошибкой.

Существует несколько способов обращения с ним, возможно, самым простым является использование параметра as_index при определении объекта groupby.

po_grouped_df = poagg_df.groupby(['EID','PCODE'], as_index=False) 

Тогда ваше слияние должно работать, как ожидалось.

Во всяком случае, вернемся к примеру моего вопроса, dataframe «левый» столбец и «가» был индекс не колонка, потому что я сделал GroupBy на «левый» без as_index = False непосредственно перед merge.

+0

@EdChum Stackoverflow заставил меня принять мой собственный ответ через 2 дня. Поэтому я обязательно приму честь после этого дня. – su79eu7k

+0

Хорошо, не знал, но это хорошо, так как это помогает с фильтрацией – EdChum

0

я не столкнулись с этой проблемой раньше, но возможная работа вокруг будет:

left_no_unicode=left.copy() 
left_no_unicode.columns=[c if c!=u'가' else 'A' for c in left_no_unicode.columns] 
result = pandas.merge(left_no_unicode, right, how='left', on=['A']) 
1

Я предполагаю, что вы строите DataFrame из файла, такие как .csv или .excel. Затем вам необходимо установить опцию кодирования:

left=pd.read_csv('kor.csv', encoding='utf-8') 
#or 
left=pd.read_excel('kor.xlsx', encoding='utf-8') 

Это решит проблему.

Смежные вопросы