【问题标题】:Is there any way to make relationship of neo4j in Pandas dataframe?有没有办法在 Pandas 数据框中建立 neo4j 的关系?
【发布时间】:2021-09-23 07:58:47
【问题描述】:

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

from py2neo import Graph
from py2neo import Node

这是我的熊猫数据框

我可以成功创建节点。

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

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

TypeError: 类型的值不受支持

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

Here is the link

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

【问题讨论】:

    标签: python-3.x pandas dataframe neo4j relationship


    【解决方案1】:

    您的代码失败,因为节点的 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 链接没有使用 py2neo 包,而是使用 neo4j python 包将密码字符串发送到数据库。如果您是初学者,我会推荐这条路线。

    【讨论】:

    • 我已经尝试使用代码 pmid.astype(int) 但仍然面临问题............
    • 类型错误:未知节点类型0 20301691 1 33237688 2 26903338 3 24741715 4 25299040 ... 4232 26065577 4233 26065544 4234 26065469 4235 26065462 4236 26065451名称:PMID,长度:4237,D型细胞:INT32 跨度>
    • 看来您需要了解更多有关 pandas 数据类的信息。您不能将 Series 直接转换为整数。你期望它做什么,总结所有条目?连接?您需要为每个条目单独创建一个节点,而不是尝试从整个系列中创建单个节点。我用示例代码块编辑了我的答案。
    • 您已经编写了 data.iterrows() 但如果您知道系列对象抛出错误,则无法迭代系列对象............
    • 在您的屏幕截图中,数据是一个数据框,而不是一个系列。如果您更改了代码中的 data,请发布更新。
    【解决方案2】:

    我在 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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 2021-03-15
      • 1970-01-01
      • 1970-01-01
      • 2016-01-09
      • 1970-01-01
      相关资源
      最近更新 更多