addisonlynch / iexfinance

Python SDK for IEX Cloud
https://addisonlynch.github.io/iexfinance
Apache License 2.0
648 stars 136 forks source link

Batch fails when missing data #239

Open shaunpatterson opened 3 years ago

shaunpatterson commented 3 years ago

Summary (include Python version)

Python 3.8

print(Stock(['ICUI'], token=token).get_quote(filter='latestPrice'))
print(Stock(['CVLB'], token=token).get_quote(filter='latestPrice'))
print(Stock(['ICUI', 'CVLB'], token=token).get_quote(filter='latestPrice'))

Prints

          latestPrice
ICUI       197.02
Empty DataFrame
Columns: []
Index: [CVLB]
...
ValueError: Mixing dicts with non-Series may lead to ambiguous ordering.

Date/time of issue

Dec 14th, 10:54am

Expected behavior

A dataframe with just ICUI, dropping CVLB

Actual behavior

ValueError

addisonlynch commented 3 years ago

Thanks. Will look to patch this for a minor release this week.

addisonlynch commented 3 years ago

Ahh, now I am unable to reproduce (I was able to yesterday). For your call I get

>>> a = Stock(["ICUI", "CVLB"])
>>> a.get_quote(filter="latestPrice")
      latestPrice
ICUI       201.50
CVLB         7.82

and also:

>>> a = Stock(["ICUI", "BADSYMBOL"])
>>> a.get_quote(filter="latestPrice")
      latestPrice
ICUI       203.61
shaunpatterson commented 3 years ago

Strange.

print(Stock(['ICUI', 'BADDD'], token=token).get_quote(filter='latestPrice'))

works for me

print(Stock(['ICUI', 'CVLB'], token=token).get_quote(filter='latestPrice'))

is still throwing the ValueError for me.

In iexfinance/base.py _format_output out is equal to

{'ICUI': {'quote': {'latestPrice': 205.34}}, 'CVLB': {}}

but

{'ICUI': {'quote': {'latestPrice': 205.34}}}

when I try 'ICUI' and 'BADSYMBOL'

{'ICUI': {'quote': {'latestPrice': 205.34}}, 'CVLB': {}}

This dict gets passed down to pd.DataFrame(). I don't see an easy way of fixing this...