我使用py2neo连接到Neo4j。
E.g我有一个查询给出了这个结果(我实际上可以是任何东西:数字,字符串....)
number | first name | last name
--------------------------------------
1 | Anne | Hathaway
2 | Tom | Cruise
3 ....
每当我从python执行cypher查询时(使用graph.cypher.execute或graph.cypher.stream命令),我都会返回一个Record对象,我需要遍历记录对象以访问要访问的各个元素它们并将它们存储在例如numpy矩阵中。
有没有办法让cypher查询的结果立即存储在列表中,numpy矩阵中......在python中?
基本上:我如何跳过返回的记录对象,避免不必要的操作来准备数据以进行进一步的计算?
答案 0 :(得分:3)
您从cypher.execute()
获得的内容是RecordList
个Record
个对象。
RecordList
和Record
的行为类似于iterables,即您可以使用for x in recordlist
遍历所有记录,并使用for x in record
遍历单个记录的所有返回值。
ResultList
有一个属性records
,它返回Record
个对象的列表。您可以将此传递给任何接受列表列表的构造函数,例如Pandas DataFrame或numpy矩阵:
import py2neo
import pandas as pd
import numpy as np
result = graph.cypher.execute(myquery)
# Pandas DataFrame
df = pd.DataFrame(result.records, columns=result.columns)
# numpy matrix
matrix = np.matrix(result.records)
当然,只有当您返回可以存储在DataFrame或矩阵中的数据类型时,这才有效。