将数据从CSV加载到Neo4j

时间:2017-08-03 01:00:36

标签: python csv neo4j cypher

我的数据看起来像

Bob             Joe           Nathan

4              5               4
3              6               111
3              3               3
111            3               4
5              2

但我有大约300列'名称',而数字是CSV中的'属性'。如何在不输入所有“名称”和“属性”并将它们链接到彼此的情况下将所有这些数据加载到neo4j中?在此先感谢。

1 个答案:

答案 0 :(得分:1)

我不知道这是否是更优雅的解决方案,但我有一个提示给你。

首先,您应该使用Transpose CSV Tool之类的工具。使用此工具,您可以输入CSV文件,如:

Bob,Joe,Nathan
4,5,4
3,6,111
3,3,3
111,3,4
5,2,

输出将是:

Bob,4,3,3,111,5
Joe,5,6,3,3,2
Nathan,4,111,3,4,

之后,您可以将CSV文件放入导入目录并使用LOAD CSV,如下所示:

LOAD CSV FROM "file:///convertedcsv.csv" AS line
WITH line[0] as name, filter(l IN line where l is not null) AS line
UNWIND line[1..] as number
WITH name, collect(toInteger(number)) as numbers
CREATE ({name:name,numbers:numbers})

在第一个WITH中,上面的查询存储名为name的变量中每行的名称,并删除整行的所有空值,将结果保存到名为line的变量中。之后,UNWIND获取从索引1开始的数字(因为索引0是名称)并将每个数字保存到number。每个number都会收集到numbers并转换为整数。

结果节点是:

MATCH (node) RETURN node as nodes

╒═══════════════════════════════════════╕
│"nodes"                                │
╞═══════════════════════════════════════╡
│{"name":"Bob","numbers":[4,3,3,111,5]} │
├───────────────────────────────────────┤
│{"name":"Nathan","numbers":[4,111,3,4]}│
├───────────────────────────────────────┤
│{"name":"Joe","numbers":[5,6,3,3,2]}   │
└───────────────────────────────────────┘