Iterate through list loop error 帮助 - Yfinance
Iterate though list loop error help - Yfinance
我创建了一个代码列表,我试图通过 Yfinance 从中获取某些信息。我面临的问题是试图在一个脚本中获取某些数据,例如 ebitda、企业价值和总资产。我浏览了很多 material 并尝试了不同的方法,但我无法弄清楚。
祝你有美好的一天。谢谢!
为一个请求工作的程序
import pandas as pd
import numpy as np
import yfinance as yf
tickers = ['AAPL', 'GOOGL', 'FB']
a = [yf.Ticker(t).info.get('ebitda', 'NaN') for t in tickers]
pd.set_option("display.max_rows", None)
df = pd.DataFrame(a, tickers, columns=['Ebitda'])
print(df)
输出
Ebitda
AAPL 120233000960
GOOGL 85196996608
FB 54758998016
这是我正在尝试做的事情,我需要帮助。
此脚本导致 df 变量的 init() TypeError(对于 pandas 数据框)
import pandas as pd
import numpy as np
import yfinance as yf
tickers = ['AAPL', 'GOOGL', 'FB']
for t in tickers:
a = yf.Ticker(t).info.get('ebitda', 'NaN')
b = yf.Ticker(t).info.get('enterpriseValue', 'NaN')
c = yf.Ticker(t).info.get('totalAssets', 'NaN')
pd.set_option("display.max_rows", None)
df = pd.DataFrame(a, tickers, b, c, columns=['Ebitda', 'EnterpriseValue', 'TotalAssets',])
print(df)
期望输出
Ticker Ebitda Enterprise Value TotalAssets
AAPL 120233000960 2460000000000 323890000000
GOOGL 85196996608 1980000000000 275909000000
FB 54758998016 833000000000 133376000000
如果你使用 for
循环然后使用正常赋值 a = ...
你只能得到最后一个值。
这是标准规则:如果您使用 for
循环,那么您必须使用 list
来获得所有结果。
顺便说一句:你可以 运行 Ticker(t)
只循环一次 - 也许它会 运行 更快。
import pandas as pd
import yfinance as yf
tickers = ['AAPL', 'GOOGL', 'FB']
column_a = [] # <-- list for all results
column_b = [] # <-- list for all results
column_c = [] # <-- list for all results
for t in tickers:
print('---', t, '---')
all_info = yf.Ticker(t).info
a = all_info.get('ebitda', 'NaN')
b = all_info.get('enterpriseValue', 'NaN')
c = all_info.get('totalAssets', 'NaN')
column_a.append(a) # <-- list for all results
column_b.append(b) # <-- list for all results
column_c.append(c) # <-- list for all results
#pd.set_option("display.max_rows", None)
df = pd.DataFrame({
'Tickets': tickers,
'Ebitda': column_a, # <-- list for all results
'EnterpriseValue' :column_b, # <-- list for all results
'TotalAssets': column_c, # <-- list for all results
})
print(df)
编辑:
最终您可以直接附加到 DataFrame
首先你必须创建空的 DataFrame
但包含所有列。
接下来您可以使用 ignore_index=True
附加字典。在 DataFrame
中,您必须再次将其分配给 DataFrame
- df = df.append(...)
import pandas as pd
import yfinance as yf
tickers = ['AAPL', 'GOOGL', 'FB']
df = pd.DataFrame(columns=['Tickets', 'Ebitda', 'EnterpriseValue', 'TotalAssets'])
for t in tickers:
print('---', t, '---')
all_info = yf.Ticker(t).info
a = all_info.get('ebitda', 'NaN')
b = all_info.get('enterpriseValue', 'NaN')
c = all_info.get('totalAssets', 'NaN')
df = df.append({
'Tickets': t,
'Ebitda': a,
'EnterpriseValue': b,
'TotalAssets': c,
}, ignore_index=True)
#pd.set_option("display.max_rows", None)
print(df)
我创建了一个代码列表,我试图通过 Yfinance 从中获取某些信息。我面临的问题是试图在一个脚本中获取某些数据,例如 ebitda、企业价值和总资产。我浏览了很多 material 并尝试了不同的方法,但我无法弄清楚。
祝你有美好的一天。谢谢!
为一个请求工作的程序
import pandas as pd
import numpy as np
import yfinance as yf
tickers = ['AAPL', 'GOOGL', 'FB']
a = [yf.Ticker(t).info.get('ebitda', 'NaN') for t in tickers]
pd.set_option("display.max_rows", None)
df = pd.DataFrame(a, tickers, columns=['Ebitda'])
print(df)
输出
Ebitda
AAPL 120233000960
GOOGL 85196996608
FB 54758998016
这是我正在尝试做的事情,我需要帮助。 此脚本导致 df 变量的 init() TypeError(对于 pandas 数据框)
import pandas as pd
import numpy as np
import yfinance as yf
tickers = ['AAPL', 'GOOGL', 'FB']
for t in tickers:
a = yf.Ticker(t).info.get('ebitda', 'NaN')
b = yf.Ticker(t).info.get('enterpriseValue', 'NaN')
c = yf.Ticker(t).info.get('totalAssets', 'NaN')
pd.set_option("display.max_rows", None)
df = pd.DataFrame(a, tickers, b, c, columns=['Ebitda', 'EnterpriseValue', 'TotalAssets',])
print(df)
期望输出
Ticker Ebitda Enterprise Value TotalAssets
AAPL 120233000960 2460000000000 323890000000
GOOGL 85196996608 1980000000000 275909000000
FB 54758998016 833000000000 133376000000
如果你使用 for
循环然后使用正常赋值 a = ...
你只能得到最后一个值。
这是标准规则:如果您使用 for
循环,那么您必须使用 list
来获得所有结果。
顺便说一句:你可以 运行 Ticker(t)
只循环一次 - 也许它会 运行 更快。
import pandas as pd
import yfinance as yf
tickers = ['AAPL', 'GOOGL', 'FB']
column_a = [] # <-- list for all results
column_b = [] # <-- list for all results
column_c = [] # <-- list for all results
for t in tickers:
print('---', t, '---')
all_info = yf.Ticker(t).info
a = all_info.get('ebitda', 'NaN')
b = all_info.get('enterpriseValue', 'NaN')
c = all_info.get('totalAssets', 'NaN')
column_a.append(a) # <-- list for all results
column_b.append(b) # <-- list for all results
column_c.append(c) # <-- list for all results
#pd.set_option("display.max_rows", None)
df = pd.DataFrame({
'Tickets': tickers,
'Ebitda': column_a, # <-- list for all results
'EnterpriseValue' :column_b, # <-- list for all results
'TotalAssets': column_c, # <-- list for all results
})
print(df)
编辑:
最终您可以直接附加到 DataFrame
首先你必须创建空的 DataFrame
但包含所有列。
接下来您可以使用 ignore_index=True
附加字典。在 DataFrame
中,您必须再次将其分配给 DataFrame
- df = df.append(...)
import pandas as pd
import yfinance as yf
tickers = ['AAPL', 'GOOGL', 'FB']
df = pd.DataFrame(columns=['Tickets', 'Ebitda', 'EnterpriseValue', 'TotalAssets'])
for t in tickers:
print('---', t, '---')
all_info = yf.Ticker(t).info
a = all_info.get('ebitda', 'NaN')
b = all_info.get('enterpriseValue', 'NaN')
c = all_info.get('totalAssets', 'NaN')
df = df.append({
'Tickets': t,
'Ebitda': a,
'EnterpriseValue': b,
'TotalAssets': c,
}, ignore_index=True)
#pd.set_option("display.max_rows", None)
print(df)