遍历列表后,接收列表中变量的NaN

2024-06-24 12:31:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一份组成ETF的股票清单。我已将标记器格式化为一个列表,并将此变量命名为assets

print(assets)
['AUD', 'CRWD', 'SPLK', 'OKTA', 'AVGO', 'CSCO', 'NET', 'ZS', 'AKAM', 'FTNT', 'BAH', 'CYBR', 'CHKP', 'BA/', 'VMW', 'PFPT', 'PANW', 'VRSN', 'FFIV', 'JNPR', 'LDOS', '4704', 'FEYE', 'QLYS', 'SAIC', 'RPD', 'HO', 'MIME', 'SAIL', 'VRNS', 'ITRI', 'AVST', 'MANT', 'TENB', '053800', 'ZIXI', 'OSPN', 'RDWR', 'ULE', 'MOBL', 'ATEN', 'TUFN', 'RBBN', 'NCC', 'KRW', 'EUR', 'JPY', 'GBP', 'USD']

我使用以下for循环迭代列表并从yahoo中提取历史数据

for i in assets:
    try:
          df[i] = web.DataReader(i, data_source='yahoo', start=start, end=end)['Adj Close']
   except RemoteDataError:
    print(f'{i}')
    continue

我得到的回报是:

BA/
4704
H0
053800
KRW
JPY

这表明这些资产在雅虎金融上找不到。我理解这种情况,并接受这一点

当我寻找理论上已经在雅虎财经上找到的股票(例如df['FEYE'])时,我得到了以下信息

0 NaN 1 NaN 2 NaN 3 NaN 4 NaN 5 NaN 6 NaN 7 NaN 8 NaN 9 NaN 10 NaN 11 NaN 12 NaN 13 NaN 14 NaN 15 NaN 16 NaN 17 NaN 18 NaN 19 NaN 20 NaN 21 NaN 22 NaN 23 NaN 24 NaN 25 NaN 26 NaN 27 NaN 28 NaN 29 NaN 30 NaN 31 NaN 32 NaN 33 NaN 34 NaN 35 NaN 36 NaN 37 NaN 38 NaN 39 NaN 40 NaN 41 NaN 42 NaN 43 NaN 44 NaN 45 NaN 46 NaN 47 NaN 48 NaN 姓名:FEYE,数据类型:float64

当我正常进行时,只有一份

(例如CSCO = web.DataReader(assets[5], data_source='yahoo', start=start, end=end)['Adj Close']

一切都好

非常感谢您的帮助

谢谢大家!

Edit: Image of NaN for reference

Edit: df.head()


Tags: df列表fornanstartyahooend股票
1条回答
网友
1楼 · 发布于 2024-06-24 12:31:47

下面是代码和输出的可复制测试示例。 如果您有名为df的现有数据帧,那么新数据在索引和列名方面是不兼容的。 需要创建新的数据帧,但不在循环内。每个itertation都会使用ticker数据创建新列

import pandas as pd
import pandas_datareader.data as web
from pandas_datareader._utils import RemoteDataError

assets=['AUD', 'CRWD', 'SPLK', 'OKTA', 'AVGO', 'CSCO', 'NET', 'ZS', 'AKAM', 'FTNT', 'BAH', 'CYBR', 'CHKP', 'BA/', 'VMW', 'PFPT', 'PANW', 'VRSN', 'FFIV', 'JNPR', 'LDOS', '4704', 'FEYE', 'QLYS', 'SAIC', 'RPD', 'HO', 'MIME', 'SAIL', 'VRNS', 'ITRI', 'AVST', 'MANT', 'TENB', '053800', 'ZIXI', 'OSPN', 'RDWR', 'ULE', 'MOBL', 'ATEN', 'TUFN', 'RBBN', 'NCC', 'KRW', 'EUR', 'JPY', 'GBP', 'USD']

df = pd.DataFrame()
for i in assets:
    try:
        print(f'Try: {i}')
        df[i] = web.DataReader(i, data_source='yahoo')['Adj Close']
    except RemoteDataError as r:
        print(f'Try: {i}: {r}')
        continue
    

结果:

Try: AUD
Try: CRWD
Try: SPLK
Try: OKTA
Try: AVGO
Try: CSCO
Try: NET
Try: ZS
Try: AKAM
Try: FTNT
Try: BAH
Try: CYBR
Try: CHKP
Try: BA/
Try: BA/: Unable to read URL: https://finance.yahoo.com/quote/BA//history?period1=1435975200&period2=1593741599&interval=1d&frequency=1d&filter=history
Response Text:
b'<html>\n<meta charset=\'utf-8\'>\n<script>\nvar u=\'https://www.yahoo.com/?err=404&err_url=https%3a%2f%2ffinance.yahoo.com%2fquote%2fBA%2f%2fhistory%3fperiod1%3d1435975200%26period2%3d1593741599%26interval%3d1d%26frequency%3d1d%26filter%3dhistory\';\nif(window!=window.top){\n  document.write(\'<p>Content is currently unavailable.</p><img src="//geo.yahoo.com/p?s=1197757039&t=\'+new Date().getTime()+\'&_R=\'+encodeURIComponent(document.referrer)+\'&err=404&err_url=\'+u+\'" width="0px" height="0px"/>\');\n}else{\n  window.location.replace(u);\n}\n</script>\n<noscript><META http-equiv="refresh" content="0;URL=\'https://www.yahoo.com/?err=404&err_url=https%3a%2f%2ffinance.yahoo.com%2fquote%2fBA%2f%2fhistory%3fperiod1%3d1435975200%26period2%3d1593741599%26interval%3d1d%26frequency%3d1d%26filter%3dhistory\'"></noscript>\n</html>\n'
Try: VMW
Try: PFPT
Try: PANW
Try: VRSN
Try: FFIV
Try: JNPR
Try: LDOS
Try: 4704
Try: 4704: No data fetched for symbol 4704 using YahooDailyReader
Try: FEYE
Try: QLYS
Try: SAIC
Try: RPD
Try: HO
Try: HO: No data fetched for symbol HO using YahooDailyReader
Try: MIME
Try: SAIL
Try: VRNS
Try: ITRI
Try: AVST
Try: MANT
Try: TENB
Try: 053800
Try: 053800: No data fetched for symbol 053800 using YahooDailyReader
Try: ZIXI
Try: OSPN
Try: RDWR
Try: ULE
Try: MOBL
Try: ATEN
Try: TUFN
Try: RBBN
Try: NCC
Try: KRW
Try: KRW: No data fetched for symbol KRW using YahooDailyReader
Try: EUR
Try: JPY
Try: JPY: No data fetched for symbol JPY using YahooDailyReader
Try: GBP

请注意,有两种类型的错误:

  • 当股票代码不存在时,例如“HO”
  • 由于“BA/”中的“/”导致结果URL错误时

结果集数据帧头df.head()

                  AUD  CRWD       SPLK  OKTA  ...   NCC  EUR         GBP        USD
Date                                          ...                                  
2015-11-03  51.500000   NaN  57.139999   NaN  ...  3.45  NaN  154.220001  13.608685
2015-12-22  55.189999   NaN  54.369999   NaN  ...  3.48  NaN  148.279999  13.924644
2015-12-23  55.560001   NaN  56.509998   NaN  ...  3.48  NaN  148.699997  14.146811
2015-12-24  55.560001   NaN  56.779999   NaN  ...  3.48  NaN  149.119995  14.324224
2015-12-28  56.270000   NaN  57.660000   NaN  ...  3.48  NaN  148.800003  14.057305

[5 rows x 43 columns]

希望这有帮助

相关问题 更多 >