2017-03-20 48 views
0

我想獲得一些變量的結果,並將其插入到數據幀的大熊貓。我從Google的Merchant API獲取一些數據,並且我想將它們寫入一個pandas DataFrame。 起初我執行的API的調用,然後使用而...繼續重申了循環,並採取下一個頁面的結果。Python的循環進出高清不會有同樣的結果

from apiclient.discovery import build 
from oauth2client.service_account import ServiceAccountCredentials 
import httplib2 
import pandas as pd 

def get_products(merchant_id): 

    request = service.products().list(merchantId=merchant_id, 
              maxResults=250) 

    while request is not None: 
     result = request.execute() 
     for product in result['resources']: 
      product_id = product['id'] 
      availability = product['availability'] 
      category = product['productType'].split('>') 
      category = category[0] 
      return product_id,availability,category 

     request = service.products().list_next(request, result) 
     continue 

if __name__ == '__main__': 

    result = get_products('yyyy') 
    print result 
    data = {'product_id': result[0], 'availability': result[1], 'category': result[2]} 

    products_df = pd.DataFrame(data,index=[0]) 
    print products_df 

然而,在我的輸出數據幀我只得到一個由於某種原因,行..

(u'online:CH:480089', u'in stock', u'Spielzeug ') 

當我在定義函數我有成千上萬行的測試。

你看到我的邏輯有點問題?

+0

'因爲你已經用它continue'沒有做任何事情。默認是繼續。 – TemporalWolf

+0

你正在循環中返回。因此,函數一旦到達'return'就會停止,它返回單個'product_id,可用性,類別'元組。你可能想積累一些東西,像'list',並返回* –

回答

1

剔除所有其他語句,保持公正的重要位:

def get_products(merchant_id): 
    while request is not None: 
     for product in result['resources']: 
      return product_id,availability,category # The first product will be returned by the function 
     continue # essentially a NOP 

通過請求您環路,並返回找到的第一個產品。您需要彙總結果,然後返回聚合:

def get_products(merchant_id): 
    result = [] 
    while request is not None: 
     for product in result['resources']: 
      result.append((product_id,availability,category)) 
    return result 

將返回一個元組列表每個產品......雖然注意到你data = {}不會與此格式工作。

+0

YES:D謝謝! –