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

使用iGraph生成网络图时遇类型错误:源/目标ID需为0基整数

解决iGraph Graph.DataFrame的TypeError:源/目标ID需为0-based整数

问题原因

你的代码报错是因为edges中的TF、Target列是字符串(object类型),而Graph.DataFrame默认要求边的源、目标列必须是0-based整数顶点ID,无法直接识别基因名称这类字符串。另外你之前错误地将边的Importance属性当作顶点属性传入,不符合iGraph的参数要求。

解决方案

先将所有唯一节点(TF和Target的并集)映射为整数ID,再用ID构建边数据,同时正确区分顶点属性和边属性:

完整代码示例

import pandas as pd
from igraph import Graph

# 示例数据(替换为你的df)
df = pd.DataFrame({
    'TF': {0: 'ZFY', 1: 'ZFY', 2: 'ZFY', 3: 'ZFY', 4: 'ZFY'},
    'Target': {0: 'DDX3Y', 1: 'EIF1AY', 2: 'CYorf15A', 3: 'USP9Y', 4: 'KDM5D'},
    'Importance': {0: 271.64476419966564,
                  1: 249.63252368981105,
                  2: 249.47948849863877,
                  3: 242.14502589211688,
                  4: 215.67076799218304}
})

# 1. 提取所有唯一节点
all_nodes = pd.concat([df['TF'], df['Target']]).unique()

# 2. 建立节点名称到0-based整数ID的映射
node_to_id = {name: idx for idx, name in enumerate(all_nodes)}

# 3. 转换边数据:替换为ID,保留Importance作为边属性
edges_final = df.assign(
    source=df['TF'].map(node_to_id),
    target=df['Target'].map(node_to_id)
)[['source', 'target', 'Importance']]

# 4. 构建顶点数据框(包含ID和节点名称)
vertices_df = pd.DataFrame({
    'id': range(len(all_nodes)),
    'name': all_nodes
})

# 5. 生成网络图
g = Graph.DataFrame(edges_final, directed=False, vertices=vertices_df, use_vids=True)

# 验证结果
print("顶点列表:", g.vs['name'])
print("边的重要性属性:", g.es['Importance'])

关键说明

  • use_vids=True:告知iGraph使用边数据框中的source和target列作为顶点ID,而非自动生成
  • 边的Importance被保留为边属性,符合数据原本的含义(每条边的重要性)
  • 顶点数据框存储节点的名称属性,方便后续可视化或分析时识别节点

可选:给顶点添加Importance属性

如果需要为顶点设置Importance(比如取该节点关联边的最大重要性),可以补充以下代码:

# 计算每个节点的最大关联边重要性
node_importance = pd.concat([
    df.groupby('TF')['Importance'].max(),
    df.groupby('Target')['Importance'].max()
]).reset_index()
node_importance.columns = ['name', 'max_importance']

# 合并到顶点数据框
vertices_df = vertices_df.merge(node_importance, on='name', how='left')

# 重新生成包含顶点Importance的图
g = Graph.DataFrame(edges_final, directed=False, vertices=vertices_df, use_vids=True)
print("顶点的最大重要性:", g.vs['max_importance'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:41:18