如何使用Pandas-matplotlib绘制Binance API订单图?

问题描述

数据在(orderbook = pd.DataFrame(orderbook_data):之后的3列中出现:

   timestamp                bids                      asks
 UNIX timestamp      [bidprice,bidvolume]   [askprice,askvolume]
        list has 100 values of each. timestamp is the same 

问题是我不知道如何访问/索引每一列的每个行列表[价格,数量]中的值

我知道,通过运行---> bids = orderbook [“ bids”]

我得到100个列表的列表---> [bidprice,bidvolume]

我希望避免循环。...必须有一种方法可以绘制数据

我希望有人能理解我的问题。我只想在x上绘制价格,在y上绘制数量。目标是让它变得生动

解决方法

因为您没有显示输入文件,所以我自己准备了它:

timestamp;bids
1579082401;[123.12,300]
1579082461;[135.40,220]
1579082736;[130.76,20]
1579082801;[123.12,180]

我曾经用它来阅读它:

orderbook = pd.read_csv('Input.csv',sep=';')
orderbook.timestamp = pd.to_datetime(orderbook.timestamp,unit='s')

其内容为:

             timestamp           bids
0  2020-01-15 10:00:01  [123.12,300]
1  2020-01-15 10:01:13  [135.40,220]
2  2020-01-15 10:05:36   [130.76,20]
3  2020-01-15 10:06:41  [123.12,180]

现在:

  • timestamp 已转换为 datetime 的本机 pandasonic 类型,
  • 但是出价 object 类型(实际上是 string )。

而且,正如我想的那样,从您的输入文件中读取时也是一样。

现在是主要任务:第一步是从出价中提取两个数字, 将它们转换为 float int 并保存在相应的列中:

orderbook = orderbook.join(orderbook.bids.str.extract(
    r'\[(?P<bidprice>\d+\.\d+),(?P<bidvolume>\d+)]'))
orderbook.bidprice = orderbook.bidprice.astype(float)
orderbook.bidvolume = orderbook.bidvolume.astype(int)

现在订单簿包含:

            timestamp           bids  bidprice  bidvolume
0 2020-01-15 10:00:01  [123.12,300]    123.12        300
1 2020-01-15 10:01:01  [135.40,220]    135.40        220
2 2020-01-15 10:05:36   [130.76,20]    130.76         20
3 2020-01-15 10:06:41  [123.12,180]    123.12        180

,您可以生成例如散点图,调用:

orderbook.plot.scatter('bidprice','bidvolume');

或其他绘图功能。

另一种可能性

或者您的 orderbook_data 字典?像这样:

orderbook_data = {
    'timestamp': [1579082401,1579082461,1579082736,1579082801],'bids': [[123.12,300],[135.40,220],[130.76,20],[123.12,180]] }

在这种情况下,当您从中创建DataFrame时,列类型 最初是:

  • 时间戳- int64
  • 出价-也是 object ,但是这次每个单元格都包含一个纯文本 pythonic 列表

然后,您还可以将 timestamp 列转换为 datetime ,就像 以上。

但是要将出价列表的列的一列)分为2个单独的列, 您应该运行:

orderbook[['bidprice','bidvolume']] = pd.DataFrame(orderbook.bids.tolist())

然后您将有2个新列,其中包含 源列,您可以像上面一样创建图形。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...