Python 当我使用另一个数据帧的参数生成数据帧时,为什么会出现递归错误?
我生成dataframe获取您的持有量,并使用dataframe.apply发送每一行以获取基金持有量。 我甚至不确定这是否是正确的方法,但在我解决我在测试文件中注意到的问题之前,我在尝试生成数据帧时遇到了一个递归错误——见下文Python 当我使用另一个数据帧的参数生成数据帧时,为什么会出现递归错误?,python,pandas,syntax,arguments,Python,Pandas,Syntax,Arguments,我生成dataframe获取您的持有量,并使用dataframe.apply发送每一行以获取基金持有量。 我甚至不确定这是否是正确的方法,但在我解决我在测试文件中注意到的问题之前,我在尝试生成数据帧时遇到了一个递归错误——见下文 import pandas as pd def get_your_holdings(): your_holdings = [['foo', 100], ['bar', 200]] df = pd.DataFrame(your_holdings, co
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!
我该怎么称呼这个呢?我也不确定如何解析从lamda x返回的数据,但我想在这里的语法正确时再问一个问题。请至少对您的程序进行最小程度的跟踪:
def get_fund_holdings(symbol, equity):
print("ENTER 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'])
这给出了输出
ENTER get_fund_holdings foo 100
Traceback (most recent call last):
...
这使得问题变得显而易见:DataFrame构造函数要求第一个参数是data
,即以某种公认的2D格式放入数据帧的内容。你给它的只是一个字符串,“foo”
。这就是建筑失败的原因
您似乎期望字符串“foo”
会被神奇地理解为变量foo
的引用。变量不是这样工作的:数据值和变量名作为不同的实体
相反,您必须明确设置该通信;我添加了更多跟踪功能,向您展示了以下功能:
def get_fund_holdings(symbol, equity):
print("ENTER get_fund_holdings", symbol, equity)
# IRL, foo and bar are scraped, instead of being kept as lists in the code...
ticker = {
"foo": [['aapl', 0.6], ['amzn', 0.3], ['msft', 0.2]],
"bar": [['tsla', 0.4], ['amzn', 0.5], ['goog', 0.2]]
}
df = pd.DataFrame(ticker[symbol], columns=['Symbol', '% Holding'])
print("TRACE\n", df)
total_equity = equity * 100
df['% Holding'] = total_equity * df['% Holding']
df.rename(columns={'% Holding': 'Equity'}, inplace=True)
print("GFH TRACE\n", df)
return df
输出:
ENTER get_fund_holdings foo 100
TRACE
Symbol % Holding
0 aapl 0.6
1 amzn 0.3
2 msft 0.2
GFH TRACE
Symbol Equity
0 aapl 6000.0
1 amzn 3000.0
2 msft 2000.0
ENTER get_fund_holdings bar 200
TRACE
Symbol % Holding
0 tsla 0.4
1 amzn 0.5
2 goog 0.2
GFH TRACE
Symbol Equity
0 tsla 8000.0
1 amzn 10000.0
2 goog 4000.0
Traceback (most recent call last):
...
在这里,您得到了一个新的错误,它基于一个后续的结构问题。这将由您来确定,或者单独的堆栈溢出帖子。您最终想要得到什么输出?我想使用get_your_holdings中的每一行作为get_fund_holdings的参数,并最终收到一个包含key:symbol和value:equity的字典或数据框。
ENTER get_fund_holdings foo 100
TRACE
Symbol % Holding
0 aapl 0.6
1 amzn 0.3
2 msft 0.2
GFH TRACE
Symbol Equity
0 aapl 6000.0
1 amzn 3000.0
2 msft 2000.0
ENTER get_fund_holdings bar 200
TRACE
Symbol % Holding
0 tsla 0.4
1 amzn 0.5
2 goog 0.2
GFH TRACE
Symbol Equity
0 tsla 8000.0
1 amzn 10000.0
2 goog 4000.0
Traceback (most recent call last):
...