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

如何用Py2neo将Pandas DataFrame导入Neo4j创建节点与关系?

将Pandas DataFrame导入Neo4j并构建关系图谱操作指南

1. 安装必要依赖

先安装Neo4j Python驱动和Pandas,确保能在Python中连接Neo4j并处理数据:

pip install neo4j pandas

2. 连接Neo4j数据库

替换代码中的连接地址、用户名和密码为你的Neo4j实例信息:

from neo4j import GraphDatabase
import pandas as pd

# 替换为你的实际DataFrame数据
df = pd.DataFrame({
    "source": ["张三", "李四", "王五"],
    "target": ["李四", "王五", "张三"],
    "relation_type": ["好友", "同事", "合作伙伴"]
})

# 建立Neo4j连接
driver = GraphDatabase.driver("bolt://localhost:7687", auth=("neo4j", "your_database_password"))

3. 批量导入数据并创建图谱

使用Cypher的UNWIND语句批量处理DataFrame数据,通过MERGE避免重复创建节点和关系:

def import_graph_data(tx, data_records):
    cypher_query = """
    UNWIND $records AS row
    // 匹配或创建source节点
    MERGE (source:Entity {name: row.source})
    // 匹配或创建target节点
    MERGE (target:Entity {name: row.target})
    // 匹配或创建两者之间的关系,并设置属性
    MERGE (source)-[r:CORRELATES_WITH {type: row.relation_type}]->(target)
    RETURN count(r) AS total_relations
    """
    result = tx.run(cypher_query, records=data_records)
    return result.single()["total_relations"]

# 执行导入操作
with driver.session() as session:
    total = session.execute_write(import_graph_data, df.to_dict("records"))
    print(f"成功创建 {total} 条关系")

# 关闭连接
driver.close()

关键细节说明

  • 节点去重:用MERGE替代CREATE,确保相同名称的节点只会被创建一次,避免数据冗余
  • 关系自定义:把CORRELATES_WITH改成符合你业务场景的关系类型,比如FOLLOWS、DEPENDS_ON;如果不需要关系属性,直接去掉{type: row.relation_type}即可
  • 多类型节点:如果source和target属于不同实体类型(比如source是用户,target是商品),可以给节点设置不同标签,比如MERGE (source:User {name: row.source})和MERGE (target:Product {id: row.target})

验证导入结果

打开Neo4j Browser,运行以下Cypher查询验证数据:

  • 查询所有节点:
MATCH (n:Entity) RETURN n.name LIMIT 10
  • 查询所有关系:
MATCH (s)-[r]->(t) RETURN s.name, type(r), t.name, r.type LIMIT 10

性能优化建议

  • 创建索引:为节点的唯一标识字段(比如示例中的name)创建索引,提升批量导入时的匹配效率:
CREATE INDEX idx_entity_name FOR (n:Entity) ON (n.name)
  • 分批次导入:如果DataFrame数据量超过10万行,建议分批次处理,避免内存溢出:
batch_size = 10000
for i in range(0, len(df), batch_size):
    batch = df.iloc[i:i+batch_size].to_dict("records")
    with driver.session() as session:
        session.execute_write(import_graph_data, batch)

内容的提问来源于stack exchange,提问作者S.Sushmi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 01:10:29