我生成dataframe获取您的持有量,并使用dataframe.apply发送每一行以获取基金持有量。 我甚至不确定这是否是正确的方法,但在我解决我在测试文件中注意到的问题之前,我在尝试生成数据帧时遇到了一个递归错误——见下文
import pandas as pd
def get_your_holdings():
your_holdings = [['foo', 100], ['bar', 200]]
df = pd.DataFrame(your_holdings, columns=['Symbol', 'Equity'])
return df
def get_fund_holdings(symbol, equity):
# IRL, foo and bar are scraped, instead of being kept as lists in the code...
foo = [['aapl', 0.6], ['amzn', 0.3], ['msft', 0.2]]
bar = [['tsla', 0.4], ['amzn', 0.5], ['goog', 0.2]]
df = pd.DataFrame(symbol, columns=['Symbol', '% Holding'])
total_equity = equity * 100
df['% Holding'] = total_equity * df['% Holding']
df.rename(columns={'% Holding': 'Equity'}, inplace=True)
return df
def main():
df = get_your_holdings()
# certainly not sure if this is right.
# was originally going to ask about this
# but want to make sure get_fund_holding works
results = (df.apply(lambda x: get_fund_holdings(x['Symbol'], x['Equity']), axis=1, result_type='expand'))
breakpoint()
if __name__ == "__main__":
main()
不确定完全回溯是否有用,因为它相当长。亮点包括:
File "C:/Users/jajam/PycharmProjects/heatmap/test.py", line 31, in <lambda>
results = (df.apply(lambda x: get_fund_holdings(x['Symbol'], x['Equity']), axis=1, result_type='expand'))
File "C:/Users/jajam/PycharmProjects/heatmap/test.py", line 16, in get_fund_holdings
df = pd.DataFrame(symbol, columns=['Symbol', '% Holding'])
File "C:\Users\jajam\anaconda3\envs\finance\lib\site-packages\pandas\core\frame.py", line 590, in __init__
raise ValueError("DataFrame constructor not properly called!")
ValueError: DataFrame constructor not properly called!
及
RecursionError: maximum recursion depth exceeded while calling a Python object
Unexpected error, recovered safely.
我该怎么称呼这个呢?我也不确定如何解析从lamdax返回的数据,但我想问一个单独的问题,这里的语法是否正确
请至少对您的程序进行最低限度的跟踪:
这给出了输出
这使得问题变得显而易见:DataFrame构造函数要求第一个参数是
data
,即以某种公认的2D格式放入数据帧的内容。你给它的只是一个字符串,"foo"
。这就是建筑失败的原因您似乎期望字符串
"foo"
将神奇地理解为变量foo
的引用。变量不是这样工作的:数据值和变量名作为不同的实体相反,您必须明确地设置对应关系;我添加了更多跟踪功能,向您展示了以下功能:
输出:
在这里,您得到了一个新的错误,它基于一个后续的结构问题。这将由您自己来解决,或者是一个单独的堆栈溢出帖子
相关问题 更多 >
编程相关推荐