我是Pandas的新手,我陷入困境。请帮助我继续。 我有一张桌子,其中一列如下图所示:
categories
-------------
[Bakeries, Food]
[Restaurants]
[Bakeries, Food]
我需要从数据框中选择包含值为餐馆或值的所有那些行(类似于SQL,其中值为'%restaurant%')。
我查看了各种论坛,我无法找到解决方案。
我该怎么做?
最新消息:
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'
答案 0 :(得分:1)
如果您有一列字符串值,则可以使用contains
方法仅查看DataFrame df
中包含“&#39; restaurant&#39;”字样的行。
df[df['categories'].str.contains('restaurant', case=False)]
Series字符串方法contains
接受字符串或正则表达式作为参数。 case
关键字参数断言匹配是否应区分大小写。
如果列的条目是Python列表而不是字符串,您可以考虑将条目转换为字符串;如果条目是可变的Python对象(例如列表),Pandas可能会有些棘手。
Pandas docs的This page提供了有关字符串方法的更多信息。