преобразование результата запроса Google DataStore в pandas фрейм данных в python - PullRequest
0 голосов
/ 06 января 2020

Мне нужно преобразовать результат запроса Google Cloud Datastore в фрейм данных, чтобы создать диаграмму из полученных данных. Запрос:

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 подобную строку результатов для каждой сущности, возвращаемой запросом:

  • Entity ('ParticleEvent', 5942717456580608) {'gc_pub_sub_id ':' 438169950283983 ',' data ':' 605 ',' event ':' интенсивность света ',' publ_at ':' 2019-10-11T14: 37: 45.407Z ',' device_id ':' e00fce6847be7713698287a1 '}>

Думал, что нашел что-то, что могло бы преобразовать в json, что я мог бы преобразовать в dataframe, но получил ошибку, что атрибут свойств не существует:

def to_json(gql_object):
    result = []
    for item in gql_object:
        result.append(dict([(p, getattr(item, p)) for p in item.properties()]))
    return json.dumps(result, cls=JSONEncoder)

Есть ли способ перебора результатов запроса, чтобы получить их в фрейм данных либо непосредственно в фрейм данных, либо преобразовав в json затем в фрейм данных?

Ответы [ 2 ]

1 голос
/ 06 января 2020

Вы можете использовать pd.read_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 

Здесь line[startPos:-1] - это, по сути, весь словарь в этой строке ввода. Используя eval, мы можем преобразовать его в настоящий словарь. Как только мы это получим, его можно легко преобразовать в объект данных

0 голосов
/ 15 января 2020

Оригинальный постер нашел обходной путь, который заключается в преобразовании каждого элемента в объекте результата запроса в строку, а затем вручную анализирует строку, чтобы извлечь необходимые данные в список.

...