在 Python 中收到“ValueError: If using all scalar values, you must pass an index”

Posted

技术标签:

【中文标题】在 Python 中收到“ValueError: If using all scalar values, you must pass an index”【英文标题】:Received "ValueError: If using all scalar values, you must pass an index" in Python 【发布时间】:2018-04-20 04:45:28 【问题描述】:

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

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]

 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]

import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

[LN3]

    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]

for ticker in tickers:
        CryptoDataCSV(ticker, 86400)

我现在收到以下错误:

----------------------------------- ---------------------------- ValueError Traceback(最近一次调用 最后)在() 1 用于代码中的代码: ----> 2 CryptoDataCSV(股票代码,86400)

CryptoDataCSV 中的

(符号,频率) 7 url ='https://poloniex.com/public?command=returnChartData&currencyPair='+symbol+'&end=9999999999&period='+str(频率)+'&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 在 read_json(path_or_buf, orient, typ, dtype, convert_axes, convert_dates,keep_default_dates,numpy,precision_float,date_unit, 编码,行) 第352章 第353章 --> 354 date_unit).parse() 355 356 如果 typ == 'series' 或 obj 为无:

~\Anaconda3\lib\site-packages\pandas\io\json\json.py in parse(self) 420 421 其他: --> 422 self._parse_no_numpy() 423 424 如果 self.obj 为无:

~\Anaconda3\lib\site-packages\pandas\io\json\json.py 在 _parse_no_numpy(自我) 第637章 第638章 --> 639 次加载(json,precision_float=self.precise_float),dtype=None) 640 elif orient == “分裂”: 641 解码 = dict((str(k), v)

~\Anaconda3\lib\site-packages\pandas\core\frame.py in init(self, 数据、索引、列、dtype、复制) 第273章 第274章 --> 275 mgr = self._init_dict(数据、索引、列、dtype=dtype) 第276章 277 将 numpy.ma.mrecords 导入为 mrecords

~\Anaconda3\lib\site-packages\pandas\core\frame.py in _init_dict(self, 数据、索引、列、数据类型) 409 个数组 = [data[k] for k in keys] 410 --> 411 return _arrays_to_mgr(arrays, data_names, index, columns, dtype=dtype) 412 413 def _init_ndarray(self, values, index, columns, dtype=None, copy=False):

~\Anaconda3\lib\site-packages\pandas\core\frame.py 在 _arrays_to_mgr(arrays, arr_names, index, columns, dtype) 5494 # 找出索引,如果需要的话 5495 if index is None: -> 5496 index = extract_index(arrays) 5497 else: 5498 index = _ensure_index(index)

~\Anaconda3\lib\site-packages\pandas\core\frame.py 在 extract_index(data) 5533 5534 如果不是索引并且不是 原始长度: -> 5535 raise ValueError('如果使用所有标量值,则必须传递'5536'一个索引') 5537

ValueError: 如果使用所有标量值,则必须传递索引

【问题讨论】:

我不知道 read_json 是否理解 URL,但是当我尝试通过请求获取结果时,我得到“无效货币对”。 @COLDSPEED 是否表明哪个货币对出错了?我用较短的列表运行它,它工作正常。任何重写的建议将不胜感激。 如果我的回答有帮助,请告诉我。在尝试使用您的较小列表时,我能够得到结果。 【参考方案1】:

我刚刚测试了你的数据,看起来你的一些货币对根本不起作用,返回一个 json 格式:

"error":"Invalid currency pair."

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

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

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))

我已经去掉了这个功能,我觉得这里没有必要,但你可以重新添加它。

【讨论】:

我在货币对中犯了一个大错。 BTC应该领先。这样它是'BTC_ETC'.... @MikeO 如果答案有帮助,请将其标记为已接受。单击灰色复选标记将其变为绿色。谢谢。 我有另一个查询,我也发布了。我们将不胜感激。 需要从大约 70 个文件中创建单个 csv 文件。基本上将所有每日价格集中在一个地方。不幸的是,时间序列根据硬币的出现时间而有很大差异。每个文件中的相同字段,我只需要新文件中每个硬币的关闭数据。 ***.com/questions/47184493/…

以上是关于在 Python 中收到“ValueError: If using all scalar values, you must pass an index”的主要内容,如果未能解决你的问题,请参考以下文章

Python:ValueError:需要多于0个值才能解包

ValueError:pytorch 中的“str”python 维度太多

ValueError:无法将字符串转换为浮点数:在 python 上绘制图形

这个python openpyxl“ValueError”是啥意思?

Python解决ValueError

ValueError:在Python中创建KMeans模型时x和y的大小必须相同