用python将google数据存储查询结果转换为pandas数据帧
我需要将Google云数据存储查询结果转换为数据帧,以便从检索到的数据创建图表。查询:用python将google数据存储查询结果转换为pandas数据帧,python,json,pandas,google-app-engine,google-cloud-platform,Python,Json,Pandas,Google App Engine,Google Cloud Platform,我需要将Google云数据存储查询结果转换为数据帧,以便从检索到的数据创建图表。查询: def fetch_times(limit): start_date = '2019-10-08' end_date = '2019-10-19' query = datastore_client.query(kind='ParticleEvent') query.add_filter( 'published_at', '>', start_date)
def fetch_times(limit):
start_date = '2019-10-08'
end_date = '2019-10-19'
query = datastore_client.query(kind='ParticleEvent')
query.add_filter(
'published_at', '>', start_date)
query.add_filter(
'published_at', '<', end_date)
query.order = ['-published_at']
times = query.fetch(limit=limit)
return times
有没有一种方法可以通过迭代查询结果将其直接转换为数据帧,或者通过转换为json然后再转换为数据帧来将其转换为数据帧?您可以使用
pd.read\u json
将json查询输出读取到数据帧中
假设输出是上面共享的字符串,那么下面的方法可以工作
#Extracting the beginning of the dictionary
startPos = line.find("{")
df = pd.DataFrame([eval(line[startPos:-1])])
输出如下所示:
gc_pub_sub_id data event published_at \
0 438169950283983 605 light intensity 2019-10-11T14:37:45.407Z
device_id
0 e00fce6847be7713698287a1
这里,
行[startPos:-1]
实际上是字符串输入中的整个字典。使用eval
,我们可以将其转换为实际的词典。一旦我们有了它,就可以很容易地将其转换为数据帧对象您可以使用pd.read\u json
将json查询输出读取到数据帧中
假设输出是上面共享的字符串,那么下面的方法可以工作
#Extracting the beginning of the dictionary
startPos = line.find("{")
df = pd.DataFrame([eval(line[startPos:-1])])
输出如下所示:
gc_pub_sub_id data event published_at \
0 438169950283983 605 light intensity 2019-10-11T14:37:45.407Z
device_id
0 e00fce6847be7713698287a1
这里,
行[startPos:-1]
实际上是字符串输入中的整个字典。使用eval
,我们可以将其转换为实际的词典。一旦我们有了它,就可以很容易地将其转换为dataframe对象原始poster找到了一个解决方法,即将查询结果对象中的每个项转换为字符串,然后手动解析字符串以将所需的数据提取到列表中 Original poster找到了一种解决方法,即将查询结果对象中的每个项转换为字符串,然后手动解析字符串,将所需数据提取到列表中 数据存储实体可以被视为Python基础字典!所以你应该能做一些简单的事情,比如
df = pd.DataFrame(datastore_entities)
数据帧
假设输出是上面共享的字符串,那么下面的方法可以工作。
…剩下的都是熊猫
如果需要将实体键
或其任何属性转换为列,可以将它们单独打包到字典中:
for e in entities: #go through entities
e['entity_key'] = e.key #assign the entity key
e['entity_key_name'] = e.key.name # for example
df = pd.DataFrame(entities)
数据存储实体可以被视为基于Python的字典!所以你应该能做一些简单的事情,比如
df = pd.DataFrame(datastore_entities)
数据帧
假设输出是上面共享的字符串,那么下面的方法可以工作。
…剩下的都是熊猫
如果需要将实体键
或其任何属性转换为列,可以将它们单独打包到字典中:
for e in entities: #go through entities
e['entity_key'] = e.key #assign the entity key
e['entity_key_name'] = e.key.name # for example
df = pd.DataFrame(entities)
fetch
函数的返回值是google.cloud.datastore.query.Iterator
,其行为类似于列表[dict]
,因此fetch
的输出可以直接传递到pd.DataFrame
import pandas as pd
df = pd.DataFrame(fetch_times(10))
这类似于@bkitej,但我添加了原始海报函数的使用。函数的
fetch
返回值是google.cloud.datastore.query.Iterator
,其行为类似于列表[dict]
,因此fetch
的输出可以直接传递到pd.DataFrame
import pandas as pd
df = pd.DataFrame(fetch_times(10))
这类似于@bkitej,但我添加了原始海报功能的使用。感谢您的输入。查询输出不是真正的json,但类似于{keyword:value}。那么您能提供一些数据示例吗?如果没有正确的数据格式,就很难给出准确的解决方案。我在上面的
实体('ParticleEvent',5942717456580608){'gc_pub_sub_id':'438169950283983','data':'605','event':'light intensity','published_at':'2019-10-11T14:37:45.407Z','device_id':'E00FCE68477BE77136987A1'}
我找到了一个(相当肮脏的)解决办法。我将查询结果对象中的每个项转换为字符串,然后手动解析字符串以将所需数据提取到列表中。现在再看一下输出,我可能已经能够剪掉项的标题部分:Entity('ParticleEvent',5942717456580608)
,这将只留下(键:值)。然后它可能会被识别为json,以便更容易地转换。您是否可以发布您的解决方案,作为对其他社区用户更高可视性的回答?谢谢,谢谢你的意见。查询输出不是真正的json,但类似于{keyword:value}。那么您能提供一些数据示例吗?如果没有正确的数据格式,就很难给出准确的解决方案。我在上面的实体('ParticleEvent',5942717456580608){'gc_pub_sub_id':'438169950283983','data':'605','event':'light intensity','published_at':'2019-10-11T14:37:45.407Z','device_id':'E00FCE68477BE77136987A1'}
我找到了一个(相当肮脏的)解决办法。我将查询结果对象中的每个项转换为字符串,然后手动解析字符串以将所需数据提取到列表中。现在再看一下输出,我可能已经能够剪掉项的标题部分:Entity('ParticleEvent',5942717456580608)
,这将只留下(键:值)。然后它可能会被识别为json,以便更容易地转换。您是否可以发布您的解决方案,作为对其他社区用户更高可视性的回答?非常感谢。是一个类似的职位,这将帮助你。这是为了能在控制台中打印出什么项目和整个gql_对象,以便提供解决方案?是一个类似的职位,这将帮助你。这是为了能在控制台中打印出什么项目和整个gql_对象,以便提供解决方案?