2014-09-22 39 views
0

我是熊猫新手,我被困在一个点上。请帮助我继续。 我有一个表和列的一个如下所示:在类似于SQL的Pandas/IPython中选择行

categories 
------------- 
[Bakeries, Food] 
[Restaurants] 
[Bakeries, Food] 

,我需要选择那些包含其中value LIKE“%餐厅值作为餐厅或者值,它是如餐馆(类似于SQL行%')来自数据帧。

我查了各种论坛,我无法找到解决方案。

我该怎么做?

最新的更新:

resmdt[resmdt['categories'].str.contains('restaurant')] 
--------------------------------------------------------------------------- 
KeyError         Traceback (most recent call last) 
<ipython-input-20-752afd545e7b> in <module>() 
     1 #cond = resm['categories'].str.contains('%Restaurants%',na=False) 
----> 2 resmdt[resmdt['categories'].str.contains('restaurant')] 

/usr/lib/python2.7/dist-packages/pandas/core/frame.pyc in __getitem__(self, key) 
    1993   if isinstance(key, (np.ndarray, list)): 
    1994    # either boolean or fancy integer index 
-> 1995    return self._getitem_array(key) 
    1996   elif isinstance(key, DataFrame): 
    1997    return self._getitem_frame(key) 

/usr/lib/python2.7/dist-packages/pandas/core/frame.pyc in _getitem_array(self, key) 
    2029    return self.take(indexer, axis=0, convert=False) 
    2030   else: 
-> 2031    indexer = self.ix._convert_to_indexer(key, axis=1) 
    2032    return self.take(indexer, axis=1, convert=True) 
    2033 

/usr/lib/python2.7/dist-packages/pandas/core/indexing.pyc in _convert_to_indexer(self, obj, axis) 
    608     mask = check == -1 
    609     if mask.any(): 
--> 610      raise KeyError('%s not in index' % objarr[mask]) 
    611 
    612     return indexer 

KeyError: '[ nan nan nan ..., nan nan nan] not in index' 

回答

1

如果你有字符串值一列,你可以使用contains方法可以只查看您的数据帧df包含单词“餐厅”的那些行。

df[df['categories'].str.contains('restaurant', case=False)] 

串联字符串方法contains接受字符串或正则表达式作为参数。 case关键字参数声明匹配是否应区分大小写。

如果列的条目是Python列表而不是字符串,那么可以考虑将条目转换为字符串;如果条目是可变的Python对象(如列表),则熊猫可能会有点棘手。

This page熊猫文档有更多关于字符串方法的信息。

+0

嗨,我忘了提及该列是一个数据框的一部分。所以在这种情况下仍然会包含工作。列中的所有值都以这种形式出现[餐厅,酒吧]。所以我假设它是一个列表。我应该将整个列转换为字符串吗? – maverick 2014-09-22 15:52:57