Ошибка значения Pandas read_json: протокол неизвестен

#python #pandas

#python #pandas

Вопрос:

Некоторое время назад я запустил следующий код, и он сработал, но теперь появляется следующая ошибка. Как это решить?

Ошибка значения: протокол неизвестен.

 import json
temp = json.dumps([status._json for status in tweet])  # create JSON
newdf = pd.read_json(temp, orient='records')
  

Комментарии:

1. Можете ли вы поделиться своим json temp ?

2. @Psidom: это просто json твитов, созданных tweepy. Ошибка была только тогда, когда я запускал коды в среде. Если я запускал его в base, ошибки не было. В любом случае, это полное уведомление об ошибке: ValueError: Protocol not known: [{"created_at": "Mon Aug 24 03:00:06 0000 2020", "id": 1297730373137453056, "id_str": "1297730373137453056", "full_text": "Dietary and Physical Activity Behaviors Among High School Students u2014 Youth Risk Behavior Survey, United State... https

3. Если я запускал его в base, ошибки не было. Тогда это, вероятно, не проблема pandas.

4. @psidom: спасибо. Я очень новичок. Не могли бы вы, пожалуйста, подсказать, какие пакеты установить в среду в этом случае?

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

Ответ №1:

Решение в моем случае состояло в использовании StringIO , как показано ниже:

 from io import StringIO
newdf = pd.read_json(StringIO(temp))
  

Похоже, pd.read_json в Pandas 1.1 больше не принимается простая строка.

Комментарии:

1. только что протестировал здесь, и это сработало как шарм, спасибо!

2. что StringIO делает с json, что заставляет его работать?

3. Похоже, что read_json теперь ищет объект, подобный файлу, а не похожий на строку. StringIO предоставляет файлоподобный интерфейс для строк. Из документации pandas: Под файлоподобным объектом мы подразумеваем объекты с помощью метода read(), такие как обработчик файла (например, через встроенную функцию open) или StringIO.

4. Проблема может заключаться в том, что данные включают путь или URL-адрес некоторой формы. В моем случае мне не нужно было использовать StringIO (), пока данные не начали включать URL. Хотелось бы, чтобы было проще найти документацию по этому поводу.

Ответ №2:

Насколько я мог отладить, эта проблема вызвана обновлением pandas. Обновление 1.1.0 немного изменило функцию read_json.

Я мог бы заставить свой код работать, установив версию pandas на 1.0.5

https://pandas.pydata.org/docs/whatsnew/v1.1.0.html

Комментарии:

1. Установка версии 1.0.5 сработала для меня. Я также пробовал более новую версию 1.1.1, но эта не сработала.