微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python 3:为什么这种方法在已经工作后不将变量除以熊猫数据帧的索引?

如何解决Python 3:为什么这种方法在已经工作后不将变量除以熊猫数据帧的索引?

它在一个地方工作,但在下面不起作用。请有人帮忙! 我第二次尝试使用“/”操作数将“要购买的股票数”数据添加到我的 Pandas 数据帧时遇到一个关键错误,尽管该方法在我的代码早期完全正常工作。我错过了什么?

import pandas as pd
import requests
import math
from scipy import stats
import numpy as np
import xlsxwriter



stocks = pd.read_csv(r'C:\Users\micha\Downloads\sp_500_stocks (1).csv')
import secrets import IEX_CLOUD_API_TOKEN

symbol = 'AAPL'
api_url = f'https://sandBox.iexapis.com/stable/stock/{symbol}/stats?token={IEX_CLOUD_API_TOKEN}'
data = requests.get(api_url).json()
print(data)

def chunks(lst,n):
    for i in range(0,len(lst),n):
        yield lst[i:i+n]

symbol_groups = list(chunks(stocks['Ticker'],100))
symbol_strings = []
for i in range(0,len(symbol_groups)):
    symbol_strings.append(','.join(symbol_groups[i]))

my_columns = ['Ticker','Stock Price','One-Year Price Return','Number of Shares to Buy']

final_dataframe = pd.DataFrame(columns=my_columns)

for symbol_string in symbol_strings:
    batch_api_call_url = f'https://sandBox.iexapis.com/stable/stock/market/batch/?types=stats,quote&symbols={symbol_string}&token={IEX_CLOUD_API_TOKEN}'
    data = requests.get(batch_api_call_url).json()
    for symbol in symbol_string.split(','):
        final_dataframe = final_dataframe.append(
            pd.Series([symbol,data[symbol]['quote']['latestPrice'],data[symbol]['stats']['year1ChangePercent'],'N/A'
                       ],index=my_columns),ignore_index=True)

print(final_dataframe)

final_dataframe.sort_values('One-Year Price Return',ascending=False,inplace=True)
final_dataframe = final_dataframe[:50]
final_dataframe.reset_index(inplace=True)
print(final_dataframe)

def portfolio_input():
    global portfolio_size
    portfolio_size = input("Enter the size of your portfolio:")

    try:
        float(portfolio_size)
    except ValueError:
        print("That is not a number! \nPlease try again:")
        portfolio_size = input("Enter the size of your portfolio:")


portfolio_input()
print(portfolio_size)

position_size = float(portfolio_size)/len(final_dataframe.index)
for i in range(0,len(final_dataframe)):
    final_dataframe.loc[i,'Number of Shares to Buy'] = math.floor(position_size/final_dataframe.loc[i,'Stock Price'])
print(final_dataframe)

这个方法在这里完全正常——打印这个数据框没问题。

# high-quality-momentum = hqm

hqm_columns = [
            'Ticker','Number of Shares to Buy','One-Year Return percentile','Six-Month Price Return','Six-Month Return percentile','Three-Month Price Return','Three-Month Return percentile','One-Month Price Return','One-Month Return percentile','HQM score'
        ]

hqm_dataframe = pd.DataFrame(columns=hqm_columns)

for symbol_string in symbol_strings:
    batch_api_call_url = f'https://sandBox.iexapis.com/stable/stock/market/batch/?types=stats,'):
        hqm_dataframe = hqm_dataframe.append(
            pd.Series([
                symbol,data[symbol]['quote'],'n/a',data[symbol]['stats']['month6ChangePercent'],data[symbol]['stats']['month3ChangePercent'],data[symbol]['stats']['month1ChangePercent'],'n/a'
            ],index=hqm_columns),ignore_index=True
        )


time_periods = [
                'One-Year','Six-Month','Three-Month','One-Month'
                ]

for row in hqm_dataframe.index:
    for time_period in time_periods:
        change_column = f'{time_period} Price Return'
        percentile_column = f'{time_period} Return percentile'
        hqm_dataframe.loc[row,percentile_column] = stats.percentileofscore(hqm_dataframe[change_column],hqm_dataframe.loc[row,change_column])

from statistics import mean

for row in hqm_dataframe.index:
    momentum_percentiles = []
    for time_period in time_periods:
        momentum_percentiles.append(hqm_dataframe.loc[row,f'{time_period} Return percentile'])
        hqm_dataframe.loc[row,'HQM score'] = mean(momentum_percentiles)

print(hqm_dataframe)

hqm_dataframe.sort_values('HQM score',inplace=True)
hqm_dataframe = hqm_dataframe[:50]


portfolio_input()
position_size = float(portfolio_size) / len(hqm_dataframe.index)
print(position_size)
for i in range(0,len(hqm_dataframe)):
    hqm_dataframe.loc[i,'Number of Shares to Buy'] = math.floor(position_size / hqm_dataframe.loc[i,'Stock Price'])
print(hqm_dataframe)

在这里给我一个关键错误!尽管在我看来它本质上是相同的代码。显然我是初学者,如果你不知道,但请有人告诉我我错过了什么!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?