Pandas:ValueError:传递值的形状是(110、10),索引暗示(111、10)

Posted

技术标签:

【中文标题】Pandas:ValueError:传递值的形状是(110、10),索引暗示(111、10)【英文标题】:Pandas: ValueError: Shape of passed values is (110, 10), indices imply (111, 10) 【发布时间】:2021-05-23 00:15:29 【问题描述】:

希望有人能帮我解决这个错误。

我正在使用 websocket 每毫秒收集一次加密货币的价格。它带给我的信息是这样的:

近期交易:['timestamp': '2021-02-20T01:15:37.264Z', 'symbol': 'XBTUSD', 'side': 'Sell', 'size': 637, 'price' :56302.5,'tickDirection':'ZeroMinusTick','trdMatchID':'b89d919f-01c9-e510-a141-f01785bff8da','grossValue':1131312,'homeNotional':0.01131312,'foreignNotional':637, : '2021-02-20T01:15:38.256Z', 'symbol': 'XBTUSD', 'side': 'Sell', 'size': 592, 'price': 56302.5, 'tickDirection': 'ZeroMinusTick', 'trdMatchID':'2b213054-d62a-55a7-fcef-5aa183f24e2c','grossValue':1051392,'homeNotional':0.01051392,'foreignNotional':592, 'timestamp': '2021-02-20T01:15:38.521Z', 'symbol': 'XBTUSD', 'side': 'Buy', 'size': 8070, 'price': 56303, 'tickDirection': 'PlusTick', 'trdMatchID': '63fdc9ac-1c86-8507-58d6-054755304bf5', 'grossValue': 14332320, 'homeNotional': 0.1433232, 'foreignNotional': 8070, 'timestamp': '2021-02-20T01 :15:38.521Z', 'symbol': 'XBTUSD', 'side': '买入', 'size':29832,'price':56303,'tickDirection':'ZeroPlusTick','trdMatchID':'6f93d2f3-f679-80ab-5e89-0ae1dfc2d84d','grossValue':52981632,'homeNotional':0.52981632,' ': 29832, 'timestamp': '2021-02-20T01:15:38.521Z', 'symbol': 'XBTUSD', 'side': 'Buy', 'size': 1023, 'price': 56303 ,'tickDirection':'ZeroPlusTick','trdMatchID':'6a058aec-a6e2-83d0-5c39-29bb00537049','grossValue':1816848,'homeNotional': 0.01816848, 'foreignNotional': 1023, 'timestamp': '2021-02-20T01:15:38.521Z', 'symbol': 'XBTUSD', 'side': 'Buy', 'size': 1172, ' price':56303,'tickDirection':'ZeroPlusTick','trdMatchID':'c1ff8488-1bc9-9167-ae80-7b579c01df4b','grossValue':2081472,'homeNotional':0.02081472,'foreignNotional':1172,' timestamp': '2021-02-20T01:15:38.521Z', 'symbol': 'XBTUSD', 'side': 'Buy', 'size': 9903, 'price': 56303, 'tickDirection': 'ZeroPlusTick ','trdMatchID':'184cd0bf-f157-1cd7-3676-af6607cd1f07','grossValue':17587728,'homeNotional':0.17587728,'foreignNotional':9903]

它是一个可变长度的数据集。可以带20、130、150、84,但不能超过200。 我对这些数据所做的是将其转换为数据框以仅提取集合的最后一个数据并将其插入到 csv 中。 它实际上工作正常,但一段时间后,可能是 10 分钟。我得到这个错误。我尝试了一些解决此类问题的方法,但事实是我无法解决。

这个错误以前没有出现过,我什至在测试环境中测试了代码,一切都很顺利。首先,我开始收到有关提取数据最后一个元素的密钥的错误。我把它改成了下面的,但现在我得到了这个错误。

错误:

Traceback(最近一次调用最后一次): 文件“C:\Users\tania\AppData\Local\Programs\Python\Python37\lib\si 经理 = BlockManager(块,轴) 文件“C:\Users\tania\AppData\Local\Programs\Python\Python37\lib\si self._verify_integrity() 文件“C:\Users\tania\AppData\Local\Programs\Python\Python37\lib\si 施工错误(tot_items,block.shape[1:],self.axes) 文件“C:\Users\tania\AppData\Local\Programs\Python\Python37\lib\si raise ValueError(f"传递值的形状是 passed,索引 i ValueError: 传递值的形状是 (110, 10),索引暗示 (111, return create_block_manager_from_arrays(数组,arr_names,轴) 文件“C:\Users\tania\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\core\internals\managers.py”,第 1675 行,在 create_block_manager_from_arrays construction_error(len(arrays), arrays[0].shape,axes, e) 文件“C:\Users\tania\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\core\internals\managers.py”,第 1694 行,在 construction_error raise ValueError(f"传递值的形状是 passed,索引暗示 implied") ValueError: 传递值的形状为 (110, 10),索引表示 (111, 10)

还是这个错误

Traceback(最近一次调用最后一次): 文件“c:/Users/tania/OneDrive/Escritorio/bot/bitmex_ws/main-pandas.py”,第 57 行,在 init 中) mgr = arrays_to_mgr(数组,列,索引,列,dtype=dtypete-packages\pandas\core\i) 文件“C:\Users\tania\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\core\internals\construction.py”,第 74 行,arrate-packages\pandas\core\iys_to_mgr ays return create_block_manager_from_arrays(arrays, arr_names, axes) te-packages\pandas\core\i 文件 "C:\Users\tania\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\core\internals\managers.py",第 1675 行,在 createmply implied") _block_manager_from_arrays 10) construction_error(len(arrays), arrays[0].shape, axes, e) 文件“C:\Users\tania\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\core\internals\managers.py”,第 1694 行,在 construction_error raise ValueError(f"传递值的形状是 passed,索引暗示 implied") ValueError: 传递值的形状为 (108, 10),索引暗示 (109, 10)

这是我的代码的一部分:

while(ws.ws.sock.connected):  
     df = pd.DataFrame(ws.recent_trades())
     co = len(df)-1
     data = [df['timestamp'][co],                
             df['side'][co],                
             df['price'][co]]
     print(data)
     with open('C:/Users/tania/OneDrive/Escritorio/bot/csv/BTCUSD_pandas.csv', 'a', newline='') as file:
          writer = csv.writer(file, delimiter=',')
          writer.writerows([data])
     sleep(0)

这是输出:

打印(数据)

['2021-02-20T01:30:43.124Z', '卖出', 56246.0]

【问题讨论】:

【参考方案1】:

除非您出于其他原因使用 pandas,否则您可能会更好、更高效地只使用 python。

假设 ws.recent_trades() 作为列表出现,您可以获得列表的最后一个元素。列表的大小无关紧要。

data = ws.recent_trades()[-1] 
print(data['timestamp'], data['side'], data['price'])

然后写入csv文件

附言。我不知道你的 df 问题的实际答案,但我假设在数据的某个地方,你得到了一个缺少数据的字典,它把事情扔掉了。您可以编写一些错误检查,但这是您可能不想要的一些开销。

【讨论】:

以上是关于Pandas:ValueError:传递值的形状是(110、10),索引暗示(111、10)的主要内容,如果未能解决你的问题,请参考以下文章

Pandas Dataframe ValueError:传递值的形状是(X,),索引暗示(X,Y)

ValueError:传递值的形状为 (569, 30),索引暗示 (569, 31)

PYODBC 到 Pandas - DataFrame 不起作用 - 传递值的形状是(x,y),索引暗示(w,z)

PYODBC到Pandas - DataFrame不工作 - 传递值的形状是(x,y),索引暗示(w,z)

Pandas concat 产生 ValueError:计划形状未对齐

Pandas DataFrame:ValueError:值的长度(13)与索引的长度(12)不匹配