pythonsocket.recv()将数据转换为数据帧DF:有更好的工作流吗?

pythonsocket.recv()将数据转换为数据帧DF:有更好的工作流吗?,python,pandas,dataframe,sockets,xlwings,Python,Pandas,Dataframe,Sockets,Xlwings,Python脚本(在localhost中)通过“socket”连接到交易软件,并使用socket.recv()调用,我收到所有请求的价格提要信息(时间、符号、出价、要价、最后一次、最后一次数量、数量等) 现在,我想分析和处理这些记录,所以我将它们附加到一个名为“priceAll”的全局数据框中,然后在单独的函数中使用它来创建输出过滤、求和、按…分组等,最后通过COM使用Xlwings将这些“过滤”的输出实时输出到excel工作表 我的代码: import numpy as np import p

Python脚本(在localhost中)通过“socket”连接到交易软件,并使用socket.recv()调用,我收到所有请求的价格提要信息(时间、符号、出价、要价、最后一次、最后一次数量、数量等)

现在,我想分析和处理这些记录,所以我将它们附加到一个名为“priceAll”的全局数据框中,然后在单独的函数中使用它来创建输出过滤、求和、按…分组等,最后通过COM使用Xlwings将这些“过滤”的输出实时输出到excel工作表

我的代码:

import numpy as np
import pandas as pd
import socket
import xlwings as xw
...

priceAll= pd.DataFrame()

def second_func(priceAll_local):
    #blabla...
    #groupy-by , sum, isin.... etc
    ...
    xw.Book(file_path).sheets['sheet1'].range('A1').value = filtered_DF 
    
    
def readSocket():
    ...
    ...
    mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    mysock.connect(('localhost', 10001))
    print ("> Socket Connected >")

    cmd = (cmd_syntax).encode() 
    mysock.send(cmd) #sending CMD request 
    
    while True:
        msg = mysock.recv(16384)
        msg_stringa=str(msg,'utf-8')
        read_df = pd.read_csv(StringIO(msg_stringa) , sep=";", error_bad_lines=False, 
                        index_col=None, header=None, 
                        engine='c', names=range(33),
                        decimal = '.')

        #if there are new prices 
        if (len(priceDF) > 0):
            priceAll = priceAll.append(priceDF, ignore_index=True).copy()
            priceAll.drop_duplicates(inplace=True, keep='last')
            priceAll.dropna(how='any',inplace=True) 
            
            second_func(priceAll)
            third_func(priceAll)
            ....
            last_func(priceAll)
        
        #it drops rows older than 10 minutes
        priceAll = priceAll[(now - priceAll['time']).astype('timedelta64[s]') < 600 ].copy() 
        ...
        ...
        #blabla...
        
将numpy导入为np
作为pd进口熊猫
导入套接字
将xlwings作为xw导入
...
pricell=pd.DataFrame()
def第二功能(价格所有本地):
#布拉布拉。。。
#分组依据、总和、isin。。。。等
...
xw.Book(文件路径).sheets['sheet1'].range('A1')。value=filtered\u DF
def readSocket():
...
...
mysock=socket.socket(socket.AF\u INET,socket.SOCK\u流)
connect(('localhost',10001))
打印(“>套接字连接>”)
cmd=(cmd_语法).encode()
mysock.send(cmd)#发送cmd请求
尽管如此:
msg=mysock.recv(16384)
msg_stringa=str(msg,'utf-8')
read_df=pd.read_csv(StringIO(msg_stringa),sep=“;”,error_bad_lines=False,
索引列=无,标题=无,
发动机class='c',名称=范围(33),
十进制='。)
#如果有新的价格
如果(len(priceDF)>0):
priceAll=priceAll.append(priceDF,ignore_index=True).copy()
priceAll.drop\u重复项(inplace=True,keep=last')
pricell.dropna(how='any',in place=True)
第二功能(价格全部)
第三方职能(价格所有)
....
最后一个功能(价格全部)
#它会删除超过10分钟的行
pricell=pricell[(现在-pricell['time'])。astype('timedelta64[s]')<600]。copy()
...
...
#布拉布拉。。。
我非常清楚,DFs不是用来作为实时框来附加连续数据的,而是:

  • “priceAll”的最大大小为3000-4000行,最多8列
  • 处理时间(不包括从套接字接收数据)约为每周期200-300ms,还不错
  • 熊猫DF操作方便,功能强大
我的问题:我的任务是否有更好的工作流,最好是基于Python的?既可以收集表格数据作为Pandas DFs的替代方案(socket是必须的),也可以通过Xlwings将其实时输出为Excel的替代方案


谢谢

很难与有效的代码争论。您是否确实需要
pandas
来处理此数据?如果是这样,那么可能没有更好的解决方案了。蒂姆,谢谢你的反馈。是的,
pandas
确实非常方便,我需要它来方便地分组、求和、平均值。我不熟悉任何其他不同的环境/库。谢谢,我将分享我的想法,尽管它可能不适用于你。我看到太多的人直接从文件进入pandas,然后浪费大量的时间试图在他们的数据帧上编写复杂的查询和更新,而事实上,将数据读入简单的列表,进行一些简单的操作,然后进入pandas进行分析会容易得多,因为pandas是他们的王者。这就是我想指出的全部。