首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >接收到的"ValueError:如果使用所有标量值,则必须在Python中传递一个索引“

接收到的"ValueError:如果使用所有标量值,则必须在Python中传递一个索引“
EN

Stack Overflow用户
提问于 2017-11-07 17:16:15
回答 1查看 4.2K关注 0票数 0

我在python上运行了以下代码,以便从一开始就检索各种密码货币收盘价。我已经使用以下代码成功地运行了它:

代码语言:javascript
复制
tickers = ['USDT_BTC','USDT_BCH','USDT_ETC','USDT_XMR','USDT_ETH','USDT_DASH',
 'USDT_XRP','USDT_LTC','USDT_NXT','USDT_STR','USDT_REP','USDT_ZEC']

现在,我已经按如下方式更改了它(包括完整的代码)并获得了一个ValueError。

LN1

代码语言:javascript
复制
 def CryptoDataCSV(symbol, frequency):

        #Params: String symbol, int frequency = 300,900,1800,7200,14400,86400

        #Returns: df from first available date

        url ='https://poloniex.com/public?command=returnChartData&currencyPair='+symbol+'&end=9999999999&period='+str(frequency)+'&start=0'

        df = pd.read_json(url)

        df.set_index('date',inplace=True)

        df.to_csv(symbol + '.csv')

        print('Processed: ' + symbol)

LN2

代码语言:javascript
复制
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

LN3

代码语言:javascript
复制
    tickers = 'ETH_BTC','STR_BTC','XMR_BTC','XRP_BTC','LTC_BTC','DASH_BTC',
'ETC_BTC','POT_BTC','OMG_BTC','FCT_BTC','ZEC_BTC','BTS_BTC','VTC_BTC',
'XEM_BTC','MAID_BTC','DGB_BTC','STRAT_BTC','LSK_BTC','XVC_BTC','SC_BTC',
'DOGE_BTC','XBC_BTC','GNT_BTC','EMC2_BTC','CLAM_BTC','RIC_BTC','SYS_BTC',
'DCR_BTC','STEEM_BTC','ZRX_BTC','GAME_BTC','VIA_BTC','NXC_BTC','NXT_BTC'
,'VRC_BTC','NAV_BTC','PINK_BTC','STORJ_BTC','ARDR_BTC','BCN_BTC','CVC_BTC',
'EXP_BTC','LBC_BTC','GNO_BTC','GAS_BTC','OMNI_BTC','XCP_BTC','NEOS_BTC',
'BURST_BTC','AMP_BTC','FLDC_BTC','FLO_BTC','SBD_BTC','BLK_BTC','BTCD_BTC',
'NOTE_BTC','GRC_BTC','PPC_BTC','BTM_BTC','XPM_BTC','NMC_BTC','PASC_BTC',
'NAUT_BTC','BELA_BTC','SJCX_BTC','HUC_BTC','RADS_BTC']

LN4

代码语言:javascript
复制
for ticker in tickers:
        CryptoDataCSV(ticker, 86400)

我现在得到以下错误: 跟踪(最近一次调用) in () 1中的代码:->2 CryptoDataCSV(滴答,86400) 在='cyPair='+symbol+'&end=9999999999&period='+str(frequency)+'&start=0‘8->9 df = pd.read_json( url ) 10 11 df.set_index('date',inplace=True) ~\Anaconda3\lib\site-packages\pandas\io\json\json.py in read_json(path_or_buf,orient,typ,dtype,convert_axes,convert_dates,keep_default_dates,numpy,precise_float,date_unit,编码,行) 352 obj = FrameParser(json,orient,dtype,convert_axes,convert_dates,353 keep_default_dates,numpy,precise_float, 解析(Self) 420 421中的~\Anaconda3\lib\site-packages\pandas\io\json\json.py:-> 422 self._parse_no_numpy() 423 424,如果self.obj为None: ~\Anaconda3\lib\site-packages\pandas\io\json\json.py in _parse_no_numpy(self) 637 if == "columns":638 self.obj = DataFrame( -> 639 loads(json,precise_float=self.precise_float),dtype=None) 640 elif orient == "split":641 decoded =dict(str(K),v) ~\Anaconda3\lib\site-packages\pandas\core\frame.py in init(self,data,index,columns,dtype,copy) 273 dtype=dtype,copy=copy) 274 elif isinstance(data,dict):-> 275 mgr = self._init_dict(data,index,columns,dtype=dtype) 276个elif isinstance(数据,( ma.MaskedArray):277个导入numpy.ma.mrecords作为记录 ~\Anaconda3\lib\site-packages\pandas\core\frame.py in _init_dict(self、data、index、columns、dtype) 409数组= [datak in keys] 410 -> 411返回_arrays_to_mgr(数组、data_names、索引、列、dtype=dtype) 412 def _init_ndarray(self、values、索引、列、dtype=None、copy=False): ~\Anaconda3\lib\site-packages\pandas\core\frame.py in _arrays_to_mgr(数组、arr_names、索引、列、dtype) 5494 #计算出索引,如果需要,5495如果索引为None:-> 5496索引=extract_index(数组) 5497其他: 5498索引=_ensure_index(索引) ~\Anaconda3\lib\site-packages\pandas\core\frame.py in extract_index(数据)55335534如果不是索引而不是raw_lengths:-> 5535引发ValueError(‘如果使用所有标量值,则必须传递’5536‘an索引’) 5537 ValueError:如果使用所有标量值,则必须传递索引

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-07 17:45:22

我刚刚测试了您的数据,似乎您的一些货币对根本不起作用,返回表单的json:

代码语言:javascript
复制
{"error":"Invalid currency pair."}

返回时,pd.read_json会抛出一个错误,因为它无法将其转换为数据格式。

最简单的解决方法是使用try-except大括号并处理任何不工作的代码。

代码语言:javascript
复制
broken_tickers = []

for t in tickers:
    url ='https://poloniex.com/public?command=returnChartData&currencyPair={}&end=9999999999&period={}&start=0'.format(t, 86400)

    try:
        df = pd.read_json(url)
    except ValueError:
        broken_tickers.append(t)
        continue

    df.set_index('date')
    df.to_csv('{}.csv'.format(t))

我已经去掉了这个函数,我觉得这里没有必要,但是你可以把它加回去。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47163749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档