Должны ли мы использовать pandas.compat.StringIO или Python 2/3 StringIO?

StringIO — это файлоподобный объект строкового буфера, который мы используем при чтении кадра данных pandas из текста, например. "Как создать Pandas DataFrame из строки?"

Какой из этих двух импортов мы должны использовать для StringIO (в pandas)? Это давний вопрос, который так и не был решен в течение четырех лет.

  1. StringIO.StringIO (Python 2) / io.StringIO (Python 3)
    • Advantages: more stable for futureproofing code, but forces us to version-fork, e.g. see code at bottom from EmilH.
  2. pandas.compat.StringIO

Код разветвления версии 2/3 для импорта из стандарта (от EmilH):

import sys
if sys.version_info[0] < 3: 
    from StringIO import StringIO
else:
    from io import StringIO

# Note: but this is very much a poor-man's version of pandas.compat, which contains much much more

Примечание:


person smci    schedule 11.05.2018    source источник
comment
копия: @Jeff jreback ...   -  person smci    schedule 11.05.2018
comment
Отсутствие стандарта вызывает как путаницу, так и поломка.   -  person smci    schedule 11.05.2018
comment
Я думаю, что это в первую очередь основано на мнении. Все подходы работают, поэтому используйте тот, который вам наиболее удобен. Когда я ответил на упомянутый вопрос, я использовал фрагмент, чтобы показать, что использовать как в Python 3, так и в Python 2. Сегодня, 4 года спустя, я использую только Python 3, поэтому для меня это не проблема. Stackoverflow, вероятно, не место, где нужно настаивать на стандарте. Если это важно, возможно, поднимите вопрос в системе отслеживания проблем pandas?   -  person Emil H    schedule 12.05.2018
comment
@EmilH: это не основано на мнении, это зависит от того, планируют ли разработчики панд изменить свое руководство по pandas.compat. Нам даже не нужно, чтобы все внутри pandas.compat было стабильным, только те идентификаторы, которые я назвал, но в любом случае оно было стабильным с тех пор, как конец 2015 года, поэтому предупреждение слишком серьезное.   -  person smci    schedule 13.05.2018
comment
@smci Я согласен, что сегодня их предупреждение слишком строго (по крайней мере, для StringIO). Но независимо от мнения разработчиков pandas: какой из этих двух импортов мы должны использовать для StringIO (внутри pandas)? ответ по-прежнему основан на мнении. Если вопрос звучит так: Существует ли официально рекомендуемый способ использования StringIO (в пандах)? Это не будет основано на мнении, но при чтении документации в настоящее время будет рекомендовано не использовать pandas.compat (несмотря на это, возможно, более чистый способ заполучить StringIO).   -  person Emil H    schedule 14.05.2018
comment
@EmilH: это основано не на мнении, а на фактах. В частности, текущий и будущий статус pandas.compat согласно команде разработчиков pandas. (Не старая «официальная рекомендация» документа, а документ о том, что явно устарело на 3+ года). Пожалуйста, посмотрите ссылки на github для кода и проблем, которые я вам процитировал. Если текущий код не согласуется с документом 4-летней давности, игнорируйте документ. Это не первый раз, когда документация пакета отстает от реальности его кода или github на годы.   -  person smci    schedule 14.05.2018