Пример моих данных:
Я БЫ | цель |
---|---|
1 | {"абв": "xyz"} |
2 | {"абв": "адф"} |
эти данные были выводом csv, который я импортировал, как показано ниже, в python
data=pd.read_csv('location',converters{'target':json.loads},header=None,doublequote=True,encoding='unicode_escape')
data=data.drop(labels=0,axis=0)
data=data.rename(columns = {0:'ID',1:'target'})
когда я пытаюсь проанализировать эти данные, используя
df=pd.json_normalize(data['target'])
я получаю пустой фрейм данных
0 | |
1 |
Я хочу проанализировать эти строки JSON, ожидая, что выходные данные в виде фрейма данных будут иметь имя поля как «abc» и значения как xyz, adf
также в случае реальных данных строка JSON огромна с массивами... если я просто копирую и вставляю строку в json_normalize, она работает, как и ожидалось, но когда я передаю ее как данные ['target'], она выдает нули
Вы пытались проверить: type(data['target'][0])
чтобы увидеть, действительно ли значения в этом столбце относятся к типу dict
? потому что в вашем коде нет ничего плохого
это строка 'str', даже когда я пытаюсь передать ее как pd.json_normalize(data['target'].to_dict())
, я все равно получаю тот же пустой фрейм данных
извините .. в приведенном выше случае pd.json_normalize(data['target'].to_dict())
вывод похож на то, что он преобразует значения индекса в столбцы, и все строки json становятся значениями 1 отдельной строки
см. мой ответ, я думаю, что это решает вашу проблему
Кстати, при чтении ваших данных не должно быть 'location.csv'
? конец файла должен быть включен
Вам нужно изменить ячейки со строк на фактические слова, и тогда ваш код заработает. Попробуй это:
df['target'] = df['target'].apply(json.loads)
df = pd.json_normalize(df['target'])
попробовал это..получил ошибку JSONDecodeError: ожидается разделитель ',': строка 1, столбец 1322 (char 1321)
также, если просто скопировать и вставить строку json в функцию нормализации, она отлично работает ... так что json, похоже, в порядке.
Я бы не сказал, что это невозможно, потому что мои знания об этом недостаточно глубоки, но просмотр документации и поиск в Google заставляют меня думать, что вы не можете передать строку вроде '{"abc":"xyz"}'
в json_normalize
. Итак, вы действительно уверены, что передали ему строку или передали ему словарь, заполненный ключом, значениями в виде строк.
другое дело, decodeError. Есть ли особая причина, по которой вы используете encoding='unicode_escape'
? Я бы предположил, что есть проблема. Я проверил этот код на вашем примере, и он отлично работает, поэтому я думаю, что проблема в том, как вы читаете данные с помощью pd.read_csv
это сработало - я думаю, была проблема с тем, как я читал csv
Спасибо .. Просто прочитайте CSV как обычно, а затем примените шаги загрузки и синтаксического анализа.
каков ваш ожидаемый результат? как должен выглядеть ваш df?