小编Elv*_*vin的帖子

使用另一个pandas DataFrame更新存储在Pytable中的pandas DataFrame

我正在尝试使用pandas DataFrame中的新数据创建一个更新存储在PyTable中的pandas DataFrame的函数.我想检查PyTable中是否缺少特定DatetimeIndexes的某些数据(值为NaN或新的Timestamp可用),将其替换为给定pandas DataFrame中的新值,并将其附加到Pytable.基本上,只需更新Pytable.我可以使用Pandas中的combine_first方法获取组合的DataFrame.Pytable下面是用虚拟数据创建的:

import pandas as pd
import numpy as np
import datetime as dt
index = pd.DatetimeIndex(start = dt.datetime(2001,1,1,0,0), periods = 20000,freq='10T')
data_in_pytable = pd.DataFrame(index=index,data=np.random.randn(20000,2),columns=['value_1','value_2'])
data.to_hdf(r'C:\pytable.h5','test',mode='r+',append=True,complevel=9,complib='zlib')
Run Code Online (Sandbox Code Playgroud)

因此创建了pytable.假设我有另一个dataFrame,我想用它来更新Pytable:

new_index = pd.DatetimeIndex(start = dt.datetime(2001,5,1,0,0), periods = 10000,freq='10T')
data_to_update=pd.DataFrame(index=new_index,data=np.random.randn(10000,2),columns=['value_1','value_2'])
store=pd.HDFStore(r'C:\pytable.h5',mode='r+',complevel=9,complib='zlib')
store.append('test',store.select('test').combine_first(data_to_update))
store.close()
Run Code Online (Sandbox Code Playgroud)

问题是PyTable保留原始值,不更新现有值.我现在有重复的条目(按索引),因为原始值不会被覆盖.

简介:如何使用其他DataFrame更新PyTable?

谢谢,Elv

python hdf5 pytables dataframe pandas

5
推荐指数
1
解决办法
2314
查看次数

ZeroMQ:PUSH上的HWM不起作用

我正在尝试编写一个服务器/客户端脚本,其中包含一个可以解决任务的服务器,以及执行它的多个工作者.问题是我的呼吸机有很多任务,它会在心跳中填满记忆.我尝试在绑定之前设置HWM,但没有成功.它只是在工作人员连接时继续发送消息,完全忽略已设置的HWM.我还有一个接收器,记录完成的任务.

server.py

import zmq

def ventilate():
    context = zmq.Context()

    # Socket to send messages on
    sender = context.socket(zmq.PUSH)
    sender.setsockopt(zmq.SNDHWM, 30) #Big messages, so I don't want to keep too many in queue
    sender.bind("tcp://*:5557")


    # Socket with direct access to the sink: used to syncronize start of batch
    sink = context.socket(zmq.PUSH)
    sink.connect("tcp://localhost:5558")

    print "Sending tasks to workers…"

    # The first message is "0" and signals start of batch
    sink.send('0')
    print "Sent starting signal"

    while True:
        sender.send("Message")



if __name__=="__main__":
    ventilate()
Run Code Online (Sandbox Code Playgroud)

worker.py

import …
Run Code Online (Sandbox Code Playgroud)

python zeromq pyzmq

3
推荐指数
1
解决办法
2383
查看次数

标签 统计

python ×2

dataframe ×1

hdf5 ×1

pandas ×1

pytables ×1

pyzmq ×1

zeromq ×1