You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用DyNetx从DataFrame创建动态图时遇节点添加问题

问题分析与解决

1. 关于[None, None, None]的问题

g.add_interaction()方法本身没有返回值,你用列表推导式执行该方法时,得到的就是由None组成的列表,这是正常现象,不代表节点/边未成功添加。可通过g.nodes()或g.edges(t)验证节点和边是否存在。

2. 关于Timestamp类型报错的问题

报错是因为新版本Pandas不再支持Timestamp与整数直接加减,而DyNetx旧版本内部代码可能存在这类操作。解决核心是将Pandas的Timestamp对象转换为DyNetx兼容的格式,比如Unix时间戳(整数)或Python原生datetime对象。

修复后的代码

import numpy as np
import pandas as pd
import dynetx as dn

df = pd.DataFrame({'sent':['78','18','94','55','68','57','78','8','78','18'],
                   'received':['18','78','35','14','57','68','57','17','18','78'],
                   'time':['2017-06-02 05:41:34','2017-06-02 05:41:35',
                           '2017-06-02 05:41:36','2017-06-02 05:41:37',
                           '2017-06-02 05:41:38','2017-06-02 05:41:39',
                           '2017-06-02 05:41:40','2017-06-02 05:41:41',
                          '2017-06-02 05:41:42','2017-06-02 05:41:43']})
# 转换为秒级Unix时间戳(整数格式)
df['time'] = pd.to_datetime(df['time']).astype(np.int64) // 10**9

g = dn.DynGraph(edge_removal=True)
# 用普通循环替代列表推导式,避免生成无用的None列表
for idx, row in df.iterrows():
    g.add_interaction(row['sent'], row['received'], row['time'])

# 验证节点是否添加成功
print(g.nodes())
# 验证指定时刻的边
print(g.edges(t=df['time'][0]))

额外说明

  • 若偏好使用原生datetime对象,可替换转换逻辑为:df['time'] = pd.to_datetime(df['time']).dt.to_pydatetime()
  • 执行无返回值的方法时,用普通for循环比列表推导式更清晰,不会生成无用的None列表

内容的提问来源于stack exchange,提问作者Rebecca James

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 08:35:34