有没有办法在 Pandas 数据帧中建立 neo4j 的关系?

Is there any way to make relationship of neo4j in Pandas dataframe?

我已经使用 py2neo 包创建了节点

from py2neo import Graph
from py2neo import Node

这是我的 pandas 数据框

我可以成功创建节点。

我一直在尝试处理关系出错!

graph.create(Relationship(pmid, "Having_author", auth))

TypeError:不支持 类型的值

我也提到了堆栈溢出问题,但仍然出现错误!

有没有其他方法可以与 pandas 数据框建立关系?

您的代码失败,因为节点的 ID 必须是文字(整数或字符串),但是您在编写 ...id = data['PMID']) 时将 ID 设置为系列。看起来 py2neo 允许您创建具有错误 ID 的节点对象,但实际上不应该,因为由于 ID 错误,与该节点的所有关系都将失败。

用一个整数作为 ID 重新创建节点 类,然后应该可以毫无问题地创建它们之间的关系。

请注意,我还没有测试过这段代码,但这是您循环遍历 df 并创建节点的方式。

for i, row in data.iterrows():
    pmid = row['PMID'] #this is the integer PMID based on your df
    pmi_node = Node("PMID row " + str(i), id=pmid) #create node

    authid = row['AU'] #this is a string author name based on your df
    auth_node = Node("Auth row " + str(i), id=authid) #create node

    graph.create(pmi_node | auth_node)

    #create a relationship between the PMI and Auth for that row
    graph.create(Relationship(pmi_node , "Having_author", auth_node))

PS -- 您引用的 SO link 没有使用 py2neo 包,而是简单地使用 neo4j 将密码字符串发送到数据库python 包。如果您是初学者,我会推荐这条路线。

我在 zip 中转换了系列对象,然后它对我有用

for pmid, au in tqdm(zip(data.PMID, data.AU),total = data.shape[0]):
    pmid_node = Node("pmid", name=int(pmid))
    au_node = Node("author", name=au)
    graph.create(Relationship(pmid_node, "HAVING_AUTHOR", au_node))