合并键(unicode列名)错误

时间:2015-07-21 11:48:18

标签: python pandas unicode

    u'가'  u'나'    
0     
1   
...


       A      B
0
1
...

上面有两个像上面那样的pandas数据框,每个都叫做'left','right'。我尝试合并如下代码。

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

但不幸的是,错误发生了。看来pandas合并左(右)_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'

之前有人遇到过这种错误吗?如果有,请告诉我并给我你的提示。

3 个答案:

答案 0 :(得分:1)

我猜您从.csv.excel等文件构建DataFrame。然后,您需要设置编码选项:

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

它将解决问题。

答案 1 :(得分:1)

对不起大家的困惑。在我看来,但不是unicode问题。这只是因为我在groupby之后尝试合并。比如this

  

默认情况下,groupby输出将分组列作为标记,而不是列,这就是合并失败的原因。

     

有几种不同的方法可以处理它,最简单的方法是在定义groupby对象时使用as_index参数。

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

然后,您的合并应该按预期工作。

无论如何,回到我的问题的例子,数据框'离开'专栏u'가'是一个索引而不是列,因为我在' left'上做了 groupby 合并之前没有 as_index = False

答案 2 :(得分: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'])