for循环中的pandas中的新列

时间:2019-03-08 11:26:13

标签: python pandas

我尝试过其他问题,因此希望这不是重复性问题。

我正在尝试查找收益的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&region=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循环中逐行创建/添加现有的熊猫列,将不胜感激。

谢谢!

1 个答案:

答案 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&region=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&region=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