2016-11-08 198 views
1

我必須requests.get()雅虎利用YQL返回json對象的兩個網址。我回來了json對象,我存儲到list()。然後我循環解析數據並創建一個dic,然後創建一個熊貓數據框架。發生了只有一個列表正在追加到數據框。看起來像在上一次迭代中,第二個列表覆蓋第一個列表。在這一點上,我無法弄清楚如何遍歷列表中的兩個元素append()。這裏是我的代碼...循環將多個列表追加到數據框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') 

我需要能夠將整個list()追加到數據幀。這個代碼的修正是什麼?

+0

爲什麼存儲在列表中的JSON? json本質上是一本字典,可以在不解析或翻譯的情況下加載到字典中。 – zenlc2000

+0

我可以將'json'直接附加到數據框嗎? – Gilbert

+0

但是,我不太熟悉熊貓數據框,根據http://stackoverflow.com/questions/31695108/how-to-append-a-dictionary-to-a-pandas-dataframe它看起來很簡單。 – zenlc2000

回答

2

只需創建dataframes的列表,並在循環結束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

這個怎麼解決呢?

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() 

在這個文件中的 「C:/Users/your_path_here/Desktop/symbols/amex.txt」 您有以下代號

ibm 
sbux 
msft 
+0

上面的解決方案運行良好,因爲我連接到雅虎API並插入到Postgresql而不保存數據到硬盤。我有一個問題,雖然在這[後](http://stackoverflow.com/questions/40519046/insert-dataframe-into-postgresql-sqlalchemy-with-idx-autoincrement) – Gilbert