我正在运行类似
def searchCassanadra(self):
# Iterate over every pokemon
for x in self.pokemon_list:
# Query
query = session.execute("SELECT pokemon_id FROM ds_pokedex.pokemon where pokemon_id=" + repr(x))
上面的代码返回了<class 'cassandra.cluster.ResultSet'>
我如何检查ResultSet
是空的还是从Cassandra中填充的?
我在python中编码。 很抱歉出现新手问题。
如果我尝试做
if query.current_rows:
print 'y'
else:
print 'n'
我收到此错误
ValueError:DataFrame的真值不明确。使用a.empty,a.bool(),a.item(),a.any()或a.all()。
感谢您的帮助。
答案 0 :(得分:0)
看起来您的query._current_rows
属性是一个熊猫DataFrame,因此,当您尝试运行query.current_rows
时,无论ResultSet
是否为空,总是会引发ValueError。
从ResultSet
的{{3}}中,我们看到current_rows
函数正在寻找_current_rows
属性的存在:
@property
def current_rows(self):
"""
The list of current page rows. May be empty if the result was empty,
or this is the last page.
"""
return self._current_rows or []
如果上面的self._current_rows
是熊猫DataFrame,它将始终返回ValueError。例如:
>>> data = {'col1': [1, 2], 'col2': [3, 4]}
>>> df = pd.DataFrame(data)
>>> df
col1 col2
0 1 3
1 2 4
>>> df or []
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/src/.pyenv/versions/3.6.5/lib/python3.6/site-packages/pandas/core/generic.py", line 1573, in __nonzero__
.format(self.__class__.__name__))
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
>>> df = pd.DataFrame()
>>> df or []
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/src/.pyenv/versions/3.6.5/lib/python3.6/site-packages/pandas/core/generic.py", line 1573, in __nonzero__
.format(self.__class__.__name__))
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
因此,要检查ResultSet
中的pandas DataFrame是否包含数据,可以执行以下操作:
if not query._current_rows.empty:
print 'y'
else:
print 'n'
(注意:我不知道您的session.row_factory
是什么样子,但我假设它是根据Cassandra返回的行创建一个熊猫DataFrame,类似于Cassandra Driver docs的答案)