首页 > 解决方案 > 暂停数据流的循环以进行进一步操作

问题描述

使用以下代码生成每分钟超过 5000 行的流式数据帧。由于此数据框位于 for 循环中,因此无法操作数据框中的数据。所以我需要知道如何隔离数据框以退出 for 循环,比如每 5 分钟一次,然后再次重新启动以收集数据框中的信息。'''

 df=pd.DataFrame(data=None)


def on_ticks(ws, ticks):
global df
for sc in ticks:
    token=sc['instrument_token']
    name=trd_portfolio[token]['name']
    ltp=sc['last_price']
    df1=pd.DataFrame([name,ltp]).T
    df1.columns=['name','ltp']
    df=df.append(df1,ignore_index=True)

    print(df)        

''' 结果输出是

           name     ltp
0          GLAXO  1352.2
1           GSPL  195.75
2           ABAN      18
3     ADANIPOWER    36.2
4        CGPOWER       6
...          ...     ...
1470      COLPAL    1317
1471         ITC   196.2
1472    JUBLFOOD  1698.5
1473     HCLTECH   550.6
1474      INDIGO   964.8

[1475 rows x 2 columns]

数据框所需的进一步操作如下:'''

df['change']=df.groupby('name')['ltp'].pct_change()*100
g = df.groupby('name')['change']
counts = g.agg(
pos_count=lambda s: s.gt(0).sum(),
neg_count=lambda s: s.lt(0).sum(),
net_count=lambda s: s.gt(0).sum()- s.lt(0).sum()).astype(int)
print(counts)

'''

但是,我无法将 for 循环冻结一段时间以使其他进程发生。我确实尝试了 sleep 方法,但它会在给定的时间内休眠,然后返回 for 循环。

需要有关如何将 for 循环冻结一段时间的指导,以便可以执行其他代码并返回到 for 循环以继续收集数据。

标签: pythonpandas

解决方案


循环没有暂停,但您可以将参数传递给其他函数,该函数在每 n 次迭代后执行其他操作。sudo 代码类似于。

for loop in range(10000):
    data        #collecting data
    if loop==100:
        other_operation(data):

def other_operation(data):
    #perform other operations here

这将在每 100 次循环迭代后执行其他操作。


推荐阅读