python - 为什么我应该解决时仍然收到“NoneType”错误?
问题描述
我正在调用某些单元格可能为空白的数据,并尝试根据某些条件对其进行过滤。
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”(返回前一天的开盘价、最高价、最低价或收盘价)。
我认为问题在于并非所有股票都填充了“市值”数据字段,因此对其进行迭代会返回“NoneType”错误消息。我是从内存中输入的,所以手边没有确切的错误信息,但稍后会更新。
解决方案
我猜这data
是某种可迭代的(列表、数据框、矩阵)。如果这是真的,那么第一个条件是将数据与无进行比较。任何可迭代的,即使是只包含 None 的也不是 None。所以第一个条件为真。
但是第二个条件(如果data
是一个 numpy 数组)是元素方面的。所以我猜测 numpy 数组中的一个或多个元素是 None ,这就是它失败的原因。
如果这真的是一个 numpy 数组,那么用 numpy 的方式来做:
data_nonnan = data[np.where(~np.isnan(data))]
print(data_nonnan[data_nonnan < 50000])
推荐阅读
- python - 更快的字节数组列表理解/转换?
- bash - 用于开始和结束值的 2 位变量的 for 循环
- python - 使用 lxml 解析 html:解码时出错
- python - 当小部件被销毁时,新的小部件被放置在应用程序的中间
- amazon-s3 - 初始化远程 S3 存储库时出现 Git 附件 400 错误
- c - 如何以原子方式和线程安全地只初始化一次全局变量
- json - 如何从服务器实时获取数据?
- http - 通过 prolog 的 Http Post 请求
- angular - lodash / angular 8:在数组中查找有效索引并使用 if 语句进行测试
- kendo-grid - 剑道网格 - 按复杂对象分组