【问题标题】:Filtering and sorting data with pandas使用 pandas 过滤和排序数据
【发布时间】:2015-12-17 21:33:47
【问题描述】:

我想从API 获取部分信息,但我不知道如何过滤数据(我只想获取选定的值,如果键不包含“BTC”字符串,则不获取值) 我正在尝试做这样的事情:

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

我从 pandas 开始,但我不知道它是否正确。

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

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

【问题讨论】:

    标签: python json pandas


    【解决方案1】:
    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
    

    【讨论】:

      【解决方案2】:

      您可以将字典(数据)传递给 pd.Dataframe 以创建 pandas 数据框。如果您想将其子集化为仅包含其中包含字符串 BTC 的列,您可以这样做:

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

      【讨论】:

        猜你喜欢
        • 2019-05-21
        • 2013-09-29
        • 2016-11-04
        • 2015-03-21
        • 2019-01-09
        • 2018-09-02
        • 2018-01-26
        • 1970-01-01
        • 2020-11-06
        相关资源
        最近更新 更多