我正在调用某些单元格可能为空白的数据,并尝试根据某些条件对其进行过滤。
if data is not None:
if data <= 50000:
print(data)
我收到一条错误消息,指出“ NoneType”数据不能与整数进行比较。为什么即使在上面的第一行代码过滤掉NoneTypes之后,为什么我仍然收到此错误?
为澄清起见而进行编辑:实际上是这样设置代码的,它从Polygon api数据提要(https://polygon.io/docs/#getting-started)中提取数据。
tickers = api.polygon.all_tickers()
for ticker in tickers:
if ticker.prevDay['c'] >= 20:
company = api.polygon.company(ticker.ticker)
if company.marketcap is not None:
if company.marketcap <= 500000000:
print(ticker.ticker)
这将从数据源中获取所有可用的股票,这些股票具有某些属性,例如“ ticker”(返回符号)或“ prevDay”(返回前一天的开盘价,最高价,最低价或收盘价)。
我认为问题在于并非所有股票都填充了“ marketcap”数据字段,因此对其进行迭代会返回“ NoneType”错误消息。我正在从内存中键入此内容,因此没有确切的错误消息,但稍后会更新。
答案 0 :(得分:1)
我将猜测data
是某种可迭代的(列表,数据框,矩阵)。
如果是这样,那么第一个条件就是将数据与“无”进行比较。任何可迭代的,甚至只包含None的迭代也不是None。所以第一个条件是真的。
但是第二个条件(如果data
是一个numpy数组)是元素式的。因此,我猜测numpy数组中的一个或多个元素为“无”,这就是它失败的原因。
如果这确实是一个numpy数组,则以numpy的方式进行操作:
data_nonnan = data[np.where(~np.isnan(data))]
print(data_nonnan[data_nonnan < 50000])