2015-11-01 54 views
0

我使用py2neo连接到Neo4j。Py2Neo - 如何避开迭代从密码查询返回的记录对象以访问查询数据

比如我有一个查询,给出了这样的结果(其实我可以是任何东西:数字,字符串....)

number  | first name | last name 
-------------------------------------- 
1   | Anne   | Hathaway 
2   | Tom   | Cruise 
3  .... 

每当我从蟒蛇执行CYPHER查询(使用graph.cypher。执行或graph.cypher.stream命令),我得到一个Record对象返回,我需要迭代通过记录对象访问个别元素访问它们,并将它们存储在例如numpy矩阵。

有没有办法让密码查询的结果立即存储在列表,numpy矩阵,....在python中?

基本上:我如何跳过被返回的记录对象并避免不必要的操作来准备数据以供进一步计算?

回答

3

你从cypher.execute()得到的是一个RecordList包含Record对象。

两个RecordListRecord的行为很像iterables,即你可以通过for x in recordlist的所有记录,并与for x in record通过单个记录的所有返回值进行迭代。

ResultList有一个属性records,它返回Record对象的列表。你可以通过这个来接受列表,如大熊猫数据帧或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) 

这工作当然只是如果返回可以存储在数据帧或矩阵数据类型。

+0

太简单了!我喜欢它。 –