Чтение файла JSON в фрейм данных БЕЗ использования модуля json - PullRequest
0 голосов
/ 20 мая 2018

У меня есть большой json-файл, который мне нужно прочитать в pandas dataframe без использования json-модуля .Вот ссылка на файл melbourne_bike_share.json .Я не знал, что вырезать, чтобы сделать минимальный пример.

Каждый раз, когда я пытаюсь перейти от чтения файла к кадру данных, я получаю ту же ошибку:

ValueError: Mixing dicts with non-Series may lead to ambiguous ordering.

Я попытался прочитать его прямо в:

import pandas as pd
mbs = pd.read_json('Melbourne_bike_share.json')

и убедиться, что моя строка, которая должна быть прочитана pd.read_json (), верна:

with open("Melbourne_bike_share.json", encoding="utf8") as mbs_json:
    mbs_string = mbs_json.readlines()
    mbs_string = [line.rstrip() for line in mbs_string]
    mbs_string = ''.join(mbs_string)

mbs = pd.read_json('Melbourne_bike_share.json')

Но все равно получаю ту же ошибку ValueError.Я не могу найти причину этой ошибки, что она на самом деле означает, или почти любые задаваемые и отвеченные вопросы, связанные с чтением файлов json, которые не просто предлагают использовать модуль json, чего я не могу сделать.

Яплохо знакомы с файлами Python и JSON.Из того, что я понял, следующий шаг после того, как я смог прочитать файл json, это сгладить его:

from pandas.io.json import json_normalize    
df = json_normalize(mbs)

, после чего я получу свой фрейм данных и смогу манипулировать этим.

PostОтредактировано, чтобы показать ожидаемую первую строку результирующего кадра данных.Первая строка - заголовки столбцов (индексы по умолчанию, пока я не выясню, как извлечь заголовки столбцов из метаданных в файле json).Я расположил заголовки столбцов 0-5, чтобы выровнять их значения, после чего формат здесь помещает их в новую строку.Извини за это.надеюсь, вы видите, что они все должны выровняться.Вторая строка - это первая строка.

    0   1                                       2   3           4       5    6  7   8   9   10  11  12  13  14
0   155 7C09387D-9E6C-4B42-9041-9A98B88F54BB    155 1428899388  880594  1453945520  880594  {\n "invalidCells" : {\n "27624917" : "22/...   2   Harbour Town - Docklands Dve - Docklands    60000   9   14  1453985105  [{"address":"","city":"","state":"","zip":""},..

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 21 мая 2018

Я думаю, вы ищете что-то вроде этого:

import pandas as pd

df = pd.read_json('Melbourne_bike_share.json', typ='series')
pd.DataFrame(data=df['data'])

0   1   2   3   4   5   6   7   8   9   10  11  12  13  14
0   155 7C09387D-9E6C-4B42-9041-9A98B88F54BB    155 1428899388  880594  1453945520  880594  {\n "invalidCells" : {\n "27624917" : "22/...   2   Harbour Town - Docklands Dve - Docklands    60000   9   14  1453985105  [{"address":"","city":"","state":"","zip":""},...
1   156 52739A59-E034-436B-A613-E7A5F62448C0    156 1428899388  880594  1453945520  880594  {\n "invalidCells" : {\n "27624917" : "22/...   4   Federation Square - Flinders St / Swanston St ...   60001   11  11  1453985105  [{"address":"","city":"","state":"","zip":""},...
2   157 7EFB5219-2764-47CE-A497-B6D872823BBE    157 1428899388  880594  1453945520  880594  {\n "invalidCells" : {\n "27624917" : "22/...   5   Plum Garland Reserve - Beaconsfield Pde - Albe...   60002   16  1   1453985105  [{"address":"","city":"","state":"","zip":""},...
3   158 4B09D743-FFEE-4185-B968-A7866E45FE0B    158 1428899388  880594  1453945520  880594  {\n "invalidCells" : {\n "27624917" : "22/...   6   State Library - Swanston St / Little Lonsdale ...   60003   9   2   1453985105  [{"address":"","city":"","state":"","zip":""},...
4   159 C5493850-5714-40E2-9A67-DA443A4F64F8    159 1428899388  880594  1453945520  880594  {\n "invalidCells" : {\n "27624917" : "22/...   7   Bourke Street Mall - 205 Bourke St - City   60004   10  1   1453985105  [{"address":"","city":"","state":"","zip":""},...

, если вы хотите добавить имена столбцов, сделайте что-то вроде этого:

import pandas as pd

mbs = pd.read_json('Melbourne_bike_share.json', typ='series')
mbs_columns = mbs['meta']['view']['columns']
names = [item['name'] for item in mbs_columns]
df = pd.DataFrame(data=mbs['data'],columns=names)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...