2015-12-17 37 views
2

我想从API得到一些信息的一部分,但我不知道如何过滤数据(我只想得到选定的值,并且如果键不包含值“BTC”字符串) 我试图做这样的事情:用大熊猫过滤和排序数据

{"BTC_MINT":{"volume":11.00, "high24":0.002, "low24":0.001}, 
"BTC_NOTE":{"volume":11.00, "high24":0.002, "low24":0.001}} 

我开始与大熊猫,但我不知道是否是正确的方法。

link = 'https://poloniex.com/public?command=returnTicker' 
with urllib.request.urlopen(link) as rawdata: 
    data = rawdata.readall().decode() 
data = json.loads(data) 
print(data.items()) 
data = pd.DataFrame([[cur, last, volume, high24, low24] 
        for cur, d in data.items() 
        for last, x, x, x, volume, x, x, high24, low24 in d.items()]) 

不幸的是,此代码不起作用。我得到以下错误:

[cur, last, volume, high24, low24] for cur, d, x, w, d, q in data.items() for last, x, x, x, volume, x, x, high24, low24 in d.items() 
ValueError: need more than 2 values to unpack 

有人可以帮助并告诉我该怎么做吗?

回答

2
df = pd.DataFrame({symbol: {"baseVolume": data[symbol].get("baseVolume"), 
          "high24hr": data[symbol].get("high24hr"), 
          "low24hr": data[symbol].get("low24hr")} 
        for symbol in data}).T 
>>> df.head() 
      baseVolume high24hr  low24hr 
BTC_1CR 0.00000000 0.00000000 0.00000000 
BTC_ABY 0.01968682 0.00000020 0.00000019 
BTC_ADN 0.00000000 0.00000000 0.00000000 
BTC_ARCH 0.07205024 0.00004813 0.00004693 
BTC_BBR 0.19846259 0.00002123 0.00002115 

先手在开始BTC索引中的名称,请执行下列操作:

>>> df[df.index.str.startswith('BTC')].head() 

      baseVolume high24hr  low24hr 
BTC_1CR 0.00000000 0.00000000 0.00000000 
BTC_ABY 0.01968682 0.00000020 0.00000019 
BTC_ADN 0.00000000 0.00000000 0.00000000 
BTC_ARCH 0.07205024 0.00004813 0.00004693 
BTC_BBR 0.19846259 0.00002123 0.00002115 
1

你可以将你的字典(数据)传递给pd.Dataframe来创建一个熊猫数据框。如果你想子集它仅包含在它的字符串BTC列,你可以这样做:

df = pd.DataFrame(data) 
new_cols = [x for x in df.columns if x.find('BTC') > -1] 
new_df = df[new_cols]