2016-08-08 5 views
0

私はPythonコードの解決に苦しんでいます。
特定の列名を印刷したいとします(例:日付オープンなど)。 日付のレコードを印刷しようとすると、エラーString indices must be integersが返されます。以下は私のコードとjsonファイルのコピーです。
私は何が欠けていますか?特定のレコードを印刷する - エラーメッセージに文字列のインデックスが整数でなければならない

{ 
    "dataset": { 
     "dataset_code": "FB", 
     "column_names": [ 
      "Date", 
      "Open", 
      "High", 
      "Low", 
      "Close", 
      "Volume", 
      "Ex-Dividend", 
      "Split Ratio", 
      "Adj. Open", 
      "Adj. High", 
      "Adj. Low", 
      "Adj. Close", 
      "Adj. Volume" 
     ], 
+0

JSONファイルの一部しか提供していないようです。それは意図的なことであり、おそらく質問の中でこれを説明するでしょう。 – MikeT

答えて

1

"dataset_code"

import json, urllib 
import quandl 
url = "https://www.quandl.com/api/v3/datasets/WIKI/FB.json?" 
loaded = urllib.urlopen(url).read() 
data = json.loads(loaded) 
for Date in data['dataset']['dataset_code']['Date']: 
    print(Date) 

JSONファイルは文字列です。

data['dataset']['dataset_code']を実行すると、結果は"FB"になります。 "FB"は文字列なので、別の文字列では索引付けできません。 data['dataset']['dataset_code']['Date']は、あなたのサンプルファイルでは"FB"['Date']に相当します。数字(「integer」)を内部に入れている場合は、[]演算子は"FB"のような文字列でしか使用できません。


このデータを意味のある何かをする、あなたはdict Sにアイテムを再構築することができます。これにより、データの操作がより簡単になります。あなたはdictsのリストを取得するには、このコードを使用することができます。

cnames = data["dataset"]["column_names"] 
entries = data["dataset"]["data"] 
data_dict = [{c: entry[i] for i, c in enumerate(cnames)} for entry in entries] 

は今、あなたのデータは、この新しい形式では

[ 
    { 
    "Volume": 20184035.0, 
    "Ex-Dividend": 0.0, 
    "Adj. High": 125.835, 
    "Adj. Close": 125.15, 
    "Adj. Volume": 20184035.0, 
    "High": 125.835, 
    "Adj. Low": 124.6184, 
    "Adj. Open": 124.98, 
    "Low": 124.6184, 
    "Date": "2016-08-05", 
    "Close": 125.15, 
    "Split Ratio": 1.0, 
    "Open": 124.98 
    }, 
    { 
    "Volume": 21065974.0, 
    "Ex-Dividend": 0.0, 
    "Adj. High": 124.79, 
    "Adj. Close": 124.36, 
    "Adj. Volume": 21065974.0, 
    "High": 124.79, 
    "Adj. Low": 122.51, 
    "Adj. Open": 122.94, 
    "Low": 122.51, 
    "Date": "2016-08-04", 
    "Close": 124.36, 
    "Split Ratio": 1.0, 
    "Open": 122.94 
    }, 
] 

の形態であり、個々の行のすべての値を選択することは非常に簡単です。データセットからのすべての日付を取得するには、単に使用します。

[x["Date"] for x in data2] 

便宜上、機能でこれをラップ:

def get_all_values(key): 
    return [x[key] for x in data2] 

さて、あなたはget_all_values("Date")get_all_values("Open")を使用することができます。

あなたの完全なコードは次のようになります。私は助け

import json, urllib 
import quandl 
url = "https://www.quandl.com/api/v3/datasets/WIKI/FB.json?" 
loaded = urllib.urlopen(url).read() 
data = json.loads(loaded) 

cnames = data["dataset"]["column_names"] 
entries = data["dataset"]["data"] 
data2 = [{c: entry[i] for i, c in enumerate(cnames)} for entry in entries] 


def get_all_values(key): 
    return [x[key] for x in data2] 

# Get all the dates from the dataset 
for Date in get_all_values("Date"): 
    print(Date) 

願っています!

+0

JSONファイルからDateとOpenを印刷しようとしています。 JSONファイルは次のようになります:u'2016-08-05 '、u'data':[[u'2016-08-05 '、124.98,125.835,124.6184,125.15,20184035.0,0.0,1.0,124.98,125.835,124.6184 、125.15、20184035.0]、[u'2016-08-04 '、122.94、124.79、122.51、124.36、21065974.0、0.0,1.0,122,94,124.79,122.51,124.36,21065974.0]、 –

+0

、Ah。私はファイルの追加の内容が必要でした。私は私の答えを改訂します –

+0

私の答えを修正しました、私はあなたの質問を手伝った場合は、チェックマークを押してください! –

関連する問題