我尝试过其他问题,因此希望这不是重复性问题。
我正在尝试查找收益的csv(stocks.csv)中有股票代码。我正在利用熊猫,请求和美丽的汤,但是我在熊猫部分中挣扎。 CSV如下所示:CSV output in pandas
这是我现有的代码:
import pandas as pd
import requests
from bs4 import BeautifulSoup
# Read csv
df = pd.read_csv(r"C:\Users\User\Desktop\stocks.csv")
for symbol in df['Symbol']:
temp_var = df.loc[df['Symbol'] == symbol, :]
try:
r = requests.get('https://query2.finance.yahoo.com/v10/finance/quoteSummary/' + symbol + '?formatted=true&crumb=8ldhetOu7RJ&lang=en-US®ion=US&modules=defaultKeyStatistics%2CfinancialData%2CcalendarEvents&corsDomain=finance.yahoo.com')
data = r.json()
financial_data = data['quoteSummary']['result'][0]['defaultKeyStatistics']
yield_dict = financial_data['yield']
df.set_value(df,"Yield", yield_dict['fmt'])
except:
pass
我所遇到的问题是我不知道如何创建一个名为“ Yield”的新列并相应地设置该列的值。我现有的代码工作正常,但是它会创建带有符号和收益的全新行。
如果有人能帮助我弄清楚如何在for循环中逐行创建/添加现有的熊猫列,将不胜感激。
谢谢!
答案 0 :(得分:2)
评论您的for循环并尝试
def get_data(x):
try:
r = requests.get('https://query2.finance.yahoo.com/v10/finance/quoteSummary/' + x + '?formatted=true&crumb=8ldhetOu7RJ&lang=en-US®ion=US&modules=defaultKeyStatistics%2CfinancialData%2CcalendarEvents&corsDomain=finance.yahoo.com')
data = r.json()
financial_data = data['quoteSummary']['result'][0]['defaultKeyStatistics']
return financial_data['yield']
except:
return 'error'
df['Yield'] = df['Symbol'].apply(lambda x: get_data(x))
如果您不想使用apply
,则可以使用索引,该索引会更快
for i in df.index:
x = df.at[i, 'Symbol']
try:
r = requests.get(
'https://query2.finance.yahoo.com/v10/finance/quoteSummary/' + x + '?formatted=true&crumb=8ldhetOu7RJ&lang=en-US®ion=US&modules=defaultKeyStatistics%2CfinancialData%2CcalendarEvents&corsDomain=finance.yahoo.com')
data = r.json()
financial_data = data['quoteSummary']['result'][0]['defaultKeyStatistics']
df.at[i, 'Yield'] = financial_data['yield']
except Exception as e:
print(e)
如果发生错误,其Yield
列中将包含Nan
值