2016-11-08 16 views
1

私はrequests.get()YQLを利用するyahooの2つのURLをjsonオブジェクトに返す必要があります。私はjsonのオブジェクトを私がlist()に格納して戻ってきます。それから私はデータを解析して、パンダのデータフレームを作成するためのダイスを作成するためにループしています。 1つのリストだけがデータフレームに追加されることになりました。最後の繰り返しのように、2番目のリストは最初のリストを上書きします。この時点で、私はどのリストを反復するのかをリストの両方の要素append()に理解できません。ここに私のコードは、私がデータフレームに全体list()を追加できるようにする必要があります...複数のリストをデータフレームのpythonに追加するループ

import requests 
import pandas as pd 


urls = ['https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.historicaldata%20where%20symbol%20in%20(%22DIA%22%2C%22SPY%22%2C%22IWN%22)%20and%20startDate%20%3D%20%222015-01-01%22%20and%20endDate%20%3D%20%222015-10-31%22&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=', 
     'https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.historicaldata%20where%20symbol%20in%20(%22DIA%22%2C%22SPY%22%2C%22IWN%22)%20and%20startDate%20%3D%20%222015-11-01%22%20and%20endDate%20%3D%20%222016-08-31%22&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback='] 


for url in urls: 
    data = requests.get(url) 
    data_json = data.json() 

    quote_list = [] 
    for quote in data_json['query']['results']['quote']: 
     quote_dic = {'symbol': quote['Symbol'], 
       'date': quote['Date'], 
       'volume': quote['Volume'], 
       'low': quote['Low'], 
       'high': quote['High'], 
       'open': quote['Open'], 
       'close': quote['Close'], 
       'adj_close': quote['Adj_Close']} 

     quote_list.append(quote_dic) 

    quote_df = pd.DataFrame(quote_list) 

quote_df.to_csv('stocks.csv') 

です。このコードの修正点は?

+0

を持っているのはなぜリストにJSONを保存しますか? jsonは本質的には本質的に辞書であり、解析や翻訳なしで辞書にロードすることができます。 – zenlc2000

+0

データフレームに 'json'を直接追加できますか? – Gilbert

+0

しかし、私はパンダのデータフレームに慣れていませんが、http://stackoverflow.com/questions/31695108/how-to-append-a-dictionary-to-a-pandas-dataframeによれば、それはかなり簡単に見えます。 – zenlc2000

答えて

2

ただ、データフレームのリストを作成し、ループの最後にそれらをCONCAT:どのようにこのソリューションについて

df_list = [] 
for url in urls: 
    data = requests.get(url) 
    data_json = data.json() 

    df = pd.DataFrame(data_json['query']['results']['quote']) 
    df_list.append(df) 

quote_df = pd.concat(df_list) 
quote_df.to_csv('stocks.csv') 
1

?このファイルを "C:/Users/your_path_here/Desktop/symbols/amex.txt" で

import urllib 
import re 
import json 

symbolslist = open("C:/Users/your_path_here/Desktop/stock_symbols.txt").read() 
symbolslist = symbolslist.split("\n") 

for symbol in symbolslist: 
    myfile = open("C:/Users/your_path_here/Desktop/" +symbol +".txt", "w+") 
    myfile.close() 

    htmltext = urllib.urlopen("http://www.bloomberg.com/markets/chart/data/1D/"+ symbol+ ":US") 
    data = json.load(htmltext) 
    datapoints = data["data_values"] 

    myfile = open("C:/Users/rshuell001/Desktop/symbols/" +symbol +".txt", "a") 
    for point in datapoints: 
     myfile.write(str(symbol+","+str(point[0])+","+str(point[1])+"\n")) 
    myfile.close() 

次のティッカーに

ibm 
sbux 
msft 
+0

私はyahooのapiに接続し、ハードディスクにデータを保存せずにpostgresqlに挿入しているので、上記の解決策はうまくいきました。私は、この[post](http://stackoverflow.com/questions/40519046/insert-dataframe-into-postgresql-sqlalchemy-with-idx-autoincrement)にある問題を抱えています。 – Gilbert

関連する問題