跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Pythonjava

用 Python 把 CSV 导入 Neo4j 的实操记录

用 Python 读取 CSV 中的人物关系数据,并通过 py2neo 将节点和关系写入 Neo4j。流程里先把原始 CSV 另存为 UTF-8,避免 pandas 读取时报 UnicodeDecodeError;然后创建并启动 Neo4j,确认数据库为空;接着在 Python 项目里安装 neo4j-python-driver、pandas、py2neo,读取数据后整理成三元组列表,先导入人物节点,再按人物、关系、关系人物的顺序创建关系。最后在 Neo4j 图数据库里检查图谱是否生成,整个过程的关键点其实就两个:编码要对,节点要先于关系写入。

禅心发布于 2026/6/30更新于 2026/8/2121 浏览
用 Python 把 CSV 导入 Neo4j 的实操记录

一、准备 CSV 数据

先把《我是刑警》的人物关系数据集准备好。原文件如果不是 UTF-8,后面读入时很容易直接报错,所以这里先用记事本打开,再另存为 UTF-8。

文章配图

文章配图

文章配图

文章配图

二、先把 Neo4j 跑起来

创建一个新的 Neo4j 数据库,数据库名和密码按自己的习惯填就行。启动之后先看一下库里是不是空的,确认环境没有被别的数据污染。

match(n) return n;

文章配图

文章配图

文章配图

文章配图

文章配图

文章配图

三、在 Python 里建项目并装依赖

项目本身没什么特别的,重点是把依赖先补齐。这里用到的是 neo4j-python-driver、pandas 和 py2neo。如果你已经装过,可以跳过。

打开 PyCharm 后,先检查解释器里有没有这些包;没有就直接在 Terminal 里装:

pip install neo4j-python-driver pandas py2neo

文章配图

文章配图

文章配图

文章配图

文章配图

文章配图

四、把 CSV 读进来,再写入 Neo4j

先做连接测试,密码换成你自己创建数据库时设置的那个。这里我更倾向于先确认连接成功,再去折腾读取和导入,不然排错会绕远路。

文章配图

接着把 CSV 读入 DataFrame。路径需要改成你本地文件的地址,其它地方基本不用动。

文章配图

读完以后先处理一下数据结构,把人物、关系、关系人物整理成一个三元组列表,后面建关系会省事很多。

文章配图

# 初始化一个空列表来存储所有的元组
tuple_total = []
# 迭代 DataFrame 的每一行
for index, row in invoice_data.iterrows():
    ties_total = [row['人物'], row['关系'], row['关系人物']]
    # 将所有元组添加到结果列表中
    tuple_total.extend([ties_total])
print(tuple_total)

先建节点,再建关系。节点部分比较直白,遍历人物列表,逐个创建 人物 标签的节点。

# 把节点导入 neo4j 中
def create_node(people):
    for name in people:
        node_1 = Node('人物', name=name)
        graph.create(node_1)
create_node(people)

文章配图

文章配图

文章配图

文章配图

文章配图

关系导入时,先根据人物名字把两个节点都查出来,再创建关系。这里用的是 NodeMatcher,思路不复杂,但前提是节点已经成功写进库里。

matcher = NodeMatcher(graph)
# 导入关系
for i in range(0, len(tuple_total)):
    name_1 = matcher.match('人物', name=tuple_total[i][0]).first()
    name_2 = matcher.match('人物', name=tuple_total[i][2]).first()
    rel = tuple_total[i][1]
    relationship = Relationship(name_1, rel, name_2)
    graph.create(relationship)

文章配图

导入完成后回到 Neo4j 看图谱,节点和关系都能正常显示就算通了。

文章配图

文章配图

五、遇到的报错

导入时最常见的问题还是编码。比如这个错误:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc8 in position 0: invalid continuation byte

文章配图

原因很直接:CSV 不是 UTF-8 编码。回头把文件按 UTF-8 重新保存,再按前面的步骤读入就行。这个坑不大,但挺烦,尤其是你已经把 Neo4j 和 Python 都跑通了,最后卡在文件编码上。

文章配图

目录

  1. 一、准备 CSV 数据
  2. 二、先把 Neo4j 跑起来
  3. 三、在 Python 里建项目并装依赖
  4. 四、把 CSV 读进来,再写入 Neo4j
  5. 初始化一个空列表来存储所有的元组
  6. 迭代 DataFrame 的每一行
  7. 把节点导入 neo4j 中
  8. 导入关系
  9. 五、遇到的报错
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • VS Code 禁用 GitHub Copilot 代码补全
  • MySQL 事务:从基础概念到隔离性理论与实践
  • OpenClaw 接入自定义模型与 WebUI 智能操作指南
  • Whisper-Large-V3-Turbo 模型高效部署实战
  • 商汤开源 SenseNova-MARS 模型:实现多模态搜索推理新突破
  • Mac 系统安装与配置 Claude Code 指南
  • Python 文本乱码原因及解决方案
  • Python 语言核心特性、应用场景及学习价值解析
  • 基于 Numpy 实现感知机模型构建与训练详解
  • Python 实现桌面时钟屏保(含待办功能)
  • AI 时代程序员提效指南:主流工具实战与避坑
  • 基于低代码平台的工单管理系统解决方案
  • LeetCode 2612 最少翻转次数:BFS 与有序集合的解法
  • AIGC 时代 Kubernetes 企业级云原生运维实战
  • 解决时间序列预测中 VMD 算法导致信息泄露的方法
  • Bug 算法路径规划:数学建模与 Python 实现
  • 基于机器学习的农产品价格数据分析与预测可视化系统设计与实现
  • 飞书 CLI 开源指南:AI 接管办公全流程实战
  • B 树与 B+ 树详解及数据库索引应用
  • 前端 EME DRM 反录屏原理与实战代码

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online