在Pandas中应使用pandas.compat.StringIO还是Python2/3标准库的StringIO?
Pandas环境中StringIO的导入选择指南
咱们先聊聊StringIO——这玩意儿是从文本读取Pandas DataFrame时必备的类文件字符串缓冲区对象,比如你想从字符串直接创建DataFrame的场景就离不开它。
**核心问题:在Pandas环境里,到底该选哪种方式导入StringIO?**这可是个悬而未决长达四年的纠结点。
可选方案一:分Python版本导入
StringIO.StringIO(Python 2)/ io.StringIO(Python 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
可选方案二:使用Pandas兼容包导入
pandas.compat.StringIO
- pandas.compat是专门的Python2/3兼容包(官方说“无需使用2to3工具”),2014年1月随Pandas 0.13.0版本一起推出
- 到Pandas 0.22版本时,pandas.compat包仍被标记为“私有”,官方也没公开说要转正的计划,官方警告原话是:*"警告:pandas.core、pandas.compat和pandas.util顶级模块被视为私有模块,其功能稳定性不做保证。"*不过从0.13版本到现在,这个模块基本没出过啥故障
- 看pandas.compat的源码就知道,它定义了
builtins、StringIO/cStringIO、BytesIO、cPickle、httplib的统一导入,还有range、filter、map和zip的迭代器版本,以及其他Python3兼容必需的元素——这些细节在0.13.0版本的更新说明里都有提到
补充说明
pandas.compat从2014年1月的Pandas 0.13.0版本开始,就作为Pandas的子包存在了- 它还被单独发布成了独立包:分别是2017年6月10日推出的0.1.0版本和同一天更新的0.1.1版本
内容的提问来源于stack exchange,提问作者smci
相关产品推荐
相关产品推荐

