我们有两张桌子:
表1:EventLog
class EventLog(Base):
""""""
__tablename__ = 'event_logs'
id = Column(Integer, primary_key=True, autoincrement=True)
# Keys
event_id = Column(Integer)
data = Column(String)
signature = Column(String)
# Unique constraint
__table_args__ = (UniqueConstraint('event_id', 'signature'),)
表2:Machine_Event_Logs
class Machine_Event_Logs(Base):
""""""
__tablename__ = 'machine_event_logs'
id = Column(Integer, primary_key=True, autoincrement=True)
# Keys
machine_id = Column(String, ForeignKey("machines.id"))
event_log_id = Column(String, ForeignKey("event_logs.id"))
event_record_id = Column(Integer)
time_created = Column(String)
# Unique constraint
__table_args__ = (UniqueConstraint('machine_id', 'event_log_id', 'event_record_id', 'time_created'),)
# Relationships
event_logs = relationship("EventLog")
EventLogs
和Machine_Event_Logs
之间的关系是1对多。
我们在EventLogs
表中注册一个唯一的事件日志,然后在每次遇到该事件时将数百万个条目注册到Machine_Event_Logs
。
目标:我们正在尝试加入这两个表来显示捕获的事件日志的整个时间轴。
我们在Panda Dataframe中尝试了merge()
函数的多个组合,但它只返回一堆NaN或空。例如:
pd.merge(event_logs, machine_event_logs, how='left', left_on='id', right_on='event_log_id')
关于如何解决这个问题的任何想法?
提前感谢您的帮助。
答案 0 :(得分:2)
根据您的数据模式,您有不兼容的类型,其中 event_logs 中的id
是整数, machine_event_logs 中的event_log_id
是字符串列。在Python中,字符串及其等效数值的相等性产生错误:
print('0'==0)
# False
因此,您的pandas left join merge会返回右侧的所有NAN
,因为未成功找到匹配项。考虑转换为对齐类型以进行正确合并:
event_logs['id'] = event_logs['id'].astype(str)
OR
machine_event_logs['event_log_id'] = machine_event_logs['event_log_id'].astype(int)