Невозможно выполнить синтаксический анализ с помощью pd.json_normalize, он выдает null со значениями индекса

Пример моих данных:

Я БЫцель
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

каков ваш ожидаемый результат? как должен выглядеть ваш df?

Rabinzel 07.05.2022 09:47

Я хочу проанализировать эти строки JSON, ожидая, что выходные данные в виде фрейма данных будут иметь имя поля как «abc» и значения как xyz, adf

Ashish Pandey 07.05.2022 09:56

также в случае реальных данных строка JSON огромна с массивами... если я просто копирую и вставляю строку в json_normalize, она работает, как и ожидалось, но когда я передаю ее как данные ['target'], она выдает нули

Ashish Pandey 07.05.2022 09:59

Вы пытались проверить: type(data['target'][0]) чтобы увидеть, действительно ли значения в этом столбце относятся к типу dict? потому что в вашем коде нет ничего плохого

Rabinzel 07.05.2022 10:08

это строка 'str', даже когда я пытаюсь передать ее как pd.json_normalize(data['target'].to_dict()), я все равно получаю тот же пустой фрейм данных

Ashish Pandey 07.05.2022 10:23

извините .. в приведенном выше случае pd.json_normalize(data['target'].to_dict()) вывод похож на то, что он преобразует значения индекса в столбцы, и все строки json становятся значениями 1 отдельной строки

Ashish Pandey 07.05.2022 10:26

см. мой ответ, я думаю, что это решает вашу проблему

Rabinzel 07.05.2022 10:27

Кстати, при чтении ваших данных не должно быть 'location.csv'? конец файла должен быть включен

Rabinzel 07.05.2022 11:18
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
8
27
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно изменить ячейки со строк на фактические слова, и тогда ваш код заработает. Попробуй это:

df['target'] = df['target'].apply(json.loads)
df = pd.json_normalize(df['target'])

попробовал это..получил ошибку JSONDecodeError: ожидается разделитель ',': строка 1, столбец 1322 (char 1321)

Ashish Pandey 07.05.2022 10:35

также, если просто скопировать и вставить строку json в функцию нормализации, она отлично работает ... так что json, похоже, в порядке.

Ashish Pandey 07.05.2022 10:37

Я бы не сказал, что это невозможно, потому что мои знания об этом недостаточно глубоки, но просмотр документации и поиск в Google заставляют меня думать, что вы не можете передать строку вроде '{"abc":"xyz"}' в json_normalize. Итак, вы действительно уверены, что передали ему строку или передали ему словарь, заполненный ключом, значениями в виде строк.

Rabinzel 07.05.2022 10:46

другое дело, decodeError. Есть ли особая причина, по которой вы используете encoding='unicode_escape'? Я бы предположил, что есть проблема. Я проверил этот код на вашем примере, и он отлично работает, поэтому я думаю, что проблема в том, как вы читаете данные с помощью pd.read_csv

Rabinzel 07.05.2022 10:48

это сработало - я думаю, была проблема с тем, как я читал csv

Ashish Pandey 07.05.2022 11:27

Спасибо .. Просто прочитайте CSV как обычно, а затем примените шаги загрузки и синтаксического анализа.

Ashish Pandey 07.05.2022 11:57

Другие вопросы по теме