python - 暂停数据流的循环以进行进一步操作
问题描述
使用以下代码生成每分钟超过 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 循环以继续收集数据。
解决方案
循环没有暂停,但您可以将参数传递给其他函数,该函数在每 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 次循环迭代后执行其他操作。
推荐阅读
- reactjs - 是的,验证模式对象条件验证
- c++ - 无法使用 MediaInfo.h 库实现 MaxCLL、MaxFall、MasteringDisplayColorPrimaries 参数定义
- regex - 如何使用正则表达式选择/取消选择包含特定单词的多行?
- javascript - 使用 jQuery 将鼠标悬停在两个元素上
- gitlab - Gitlab 管道没有部署的版本
- android - 两个不同的第三方库使用不同版本的同一个库
- apache-kafka - Kafka Connect - 不适用于更新操作
- sql - Oracle SQL regexp_substr
- php - 从 PHP 5.4 更新到 7.4 时出错:“您的 PHP 安装似乎缺少 WordPress 所需的 MySQL 扩展。”
- excel - VBA 转置数据