关键(unicode列名)错误合并
问题描述:
u'가' u'나'
0
1
...
A B
0
1
...
有两个像上面这样的数据框,分别叫做'left'和'right'。我试着像下面的代码合并。关键(unicode列名)错误合并
result = pandas.merge(left, right, how='left', left_on=[u'가'], right_on=['A'])
但不幸的是,发生了错误。看来大熊猫合并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'
以前有人遇到过这种错误吗?如果是这样,请让我知道,并给我你的提示。
答
对不起每个人都困惑。在我看来,但不是unicode问题。这只是因为我在groupby之后尝试合并。如this。
默认情况下,groupby输出将分组列作为索引而不是列,这就是合并失败的原因。
有几种不同的方式来处理它,可能最简单的方法是在定义groupby对象时使用as_index参数。
po_grouped_df = poagg_df.groupby(['EID','PCODE'], as_index=False)
然后,按照预期的合并应该工作。
不管怎样,回到我的问题的例子,数据帧“左”列u“가”是一个索引没有列,因为我做了GROUPBY在“左”没有as_index =假只是前合并。
答
我还没有遇到过这个问题,但一个可能的解决办法是:
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'])
答
我猜你从文件构建数据帧,如.csv
或.excel
。然后,您需要设置编码选项:
left=pd.read_csv('kor.csv', encoding='utf-8')
#or
left=pd.read_excel('kor.xlsx', encoding='utf-8')
它会解决问题。
只是出于好奇才做了以下工作:'result = pandas.merge(left,right,how ='left',left_on = left.columns [0],right_on = right.columns [0])'? – EdChum
你是对的。对不起每个人都感到困惑。在我看来,但不是unicode问题。这仅仅是因为我在_groupby_之后尝试了_merge_。 http://*.com/a/24980809/3054161 – su79eu7k
请发表回答,并接受它,所以这个问题并不会得到答复,谢谢 – EdChum