一、准备数据
首先需要准备好待导入的 CSV 数据集。为了保证后续 Python 脚本能正常读取,务必确认文件编码格式为 UTF-8。
- 使用文本编辑器(如记事本)打开 CSV 文件。
- 选择'另存为',在编码选项中选择'UTF-8'。
- 保存时若提示是否覆盖,确认即可。
这一步非常关键,否则后续运行代码时极易出现 UnicodeDecodeError 错误。
二、Neo4j 环境配置
确保 Neo4j 数据库已安装并处于运行状态。
- 启动 Neo4j 服务。
- 登录 Neo4j Browser。
- 执行基础查询验证连接是否正常:
match(n) return n;
如果返回空结果集或报错,请检查数据库服务是否成功启动。
三、Python 项目搭建
在本地开发环境中创建 Python 项目,并配置必要的依赖库。
-
新建一个 Python 包或项目文件夹。
-
检查解释器设置,确保安装了以下核心库:
neo4j-python-driverpandaspy2neo
-
通过终端安装依赖(以 pip 为例):
pip install neo4j-python-driver pandas py2neo
安装完成后,建议在终端再次确认版本无误。
四、代码实现与数据导入
接下来编写 Python 脚本,完成从 CSV 读取到图数据库写入的全过程。
1. 连接测试
首先建立与 Neo4j 的连接。注意修改代码中的密码为你实际设置的数据库密码。
from py2neo import Graph, Node, Relationship
# 替换为你的实际地址和密码
graph = Graph("bolt://localhost:7687", auth=("neo4j", "你的密码"))
2. 读取与处理数据
使用 pandas 读取 CSV 文件,并将其转换为便于遍历的结构。
import pandas as pd
# 读取 CSV 文件,请根据实际路径修改
invoice_data = pd.read_csv("your_file.csv")
# 初始化列表存储元组
tuple_total = []
for index, row in invoice_data.iterrows():
ties_total = [row['人物'], row['关系'], row['关系人物']]
tuple_total.extend([ties_total])
print(tuple_total)
3. 创建节点
遍历数据,将人物信息作为节点写入数据库。
def create_node(people):
for name in people:
node_1 = Node('人物', name=name)
graph.create(node_1)
# 提取所有人物名称
people_list = list(invoice_data['人物'])
create_node(people_list)
4. 创建关系
节点创建完毕后,需要根据 CSV 中的关系字段建立连接。
matcher = NodeMatcher(graph)
for i in range(len(tuple_total)):
# 查找起始节点和结束节点
name_1 = matcher.match('人物', name=tuple_total[i][0]).first()
name_2 = matcher.match('人物', name=tuple_total[i][2]).first()
rel_type = tuple_total[i][1]
if name_1 and name_2:
relationship = Relationship(name_1, rel_type, name_2)
graph.create(relationship)
5. 验证结果
运行完上述代码后,回到 Neo4j Browser 查看是否有新的节点和边生成。你可以再次运行 match(n) return n; 来确认数据量。
五、常见问题处理
在实操过程中,可能会遇到如下典型错误:
错误: UnicodeDecodeError: 'utf-8' codec can't decode byte ...
原因: CSV 文件编码不是 UTF-8,导致 Python 读取失败。
解决: 回到第一步,重新用记事本打开文件,另存为 UTF-8 格式即可解决。
此外,确保网络连接通畅,且 Neo4j 的 Bolt 端口(默认 7687)未被防火墙拦截。

