簡體   English   中英

從 CSV 使用 Py2Neo 創建唯一的節點關系

[英]Creating Unique Node Relationships with Py2Neo from CSV

我有一些 csv 格式的數據。 每行描述兩個節點之間的關系。 節點可以與其他節點有多個關系,盡管每行只有一個關系。

例如,這是從 csv 中的一行派生的關系:

(Entity1:Name {Type,Details})-[關系類型]->(Entity2:Name {Type,Details})

Entity1 可以在不同的行上代替 Entity2,反之亦然。 Entity1 也可以與 Entity3 和 Entity4 等有關系,盡管它的類型永遠不會改變。

使用 Py2Neo 我可以導入和創建關系,但最終會為實體加載大量重復節點。 我希望每個實體節點都是唯一的。這就是我所擁有的:

def payload1(entity1,type1,relationtype,details_one,entity2,type2,details_two):
        graph = Graph("bolt://localhost:7687",auth=("Admin", "Password"))
        Entity1 = Node(type1,Name=entity1,Details=details_one)
        Entity2 = Node(type2,Name=entity2,Details=details_two)
        graph.create(Entity1)
        graph.create(Entity2)
        graph.create(Relationship(Entity1,relationtype,Entity2))




    df = pd.read_csv ('Data.csv')
    entities1 = df['Entity1'].tolist()
    types1 = df['Type'].tolist()
    relations1 = df['RelationType'].tolist()
    details1 = df['Details'].tolist()
    entity2 = df['Entity2'].tolist()
    types2 = df['Type2'].tolist()
    details_two = df['Details.1'].tolist()
    for (a, b, c,d,e,f,g) in itertools.zip_longest(entities1,types1,relations1,details1,entity2,types2,details_two):
        print (a, b, c,d,e,f,g)
        data = [((a,b,d),(c),(e,f,g))]
        keys = ["Name","Type","Details"]
        payload1(a,b,c,d,e,f,g)

與其進行創建,不如進行合並。 簡單來說,merge 如果存在就不會創建重復節點。 這是有關它的文檔:

參考: https://py2neo.org/v4/_modules/py2neo/database.html#Transaction.merge

對於每個節點,通過基於單個 label 和屬性值將該節點與潛在的遠程等效節點進行比較來執行合並。 如果沒有找到遠程匹配,則創建一個新節點; 如果找到匹配項,則更新遠程節點的標簽和屬性。

OLD code:
    graph.create(Entity1) 

NEW code:
    graph.merge(Entity1) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM