我们应该使用 pandas.compat.StringIO 还是 Python 2/3 StringIO?

smc*_*mci 5 import backwards-compatibility stringio python-2to3 pandas

StringIO 是我们在从文本中读取Pandas数据帧时使用的类似文件的字符串缓冲区对象,例如“如何从字符串创建 Pandas数据帧?”

我们应该将这两个导入中的哪一个用于 StringIO(在熊猫中)?这是一个长期存在的问题,四年来从未得到解决。

  1. StringIO.StringIO(Python 2)/ io.StringIO(Python 3)
    • 优点:对于面向未来的代码更稳定,但迫使我们进行版本分叉,例如参见 EmilH 底部的代码。
  2. pandas.compat.StringIO

用于从标准(来自 EmilH)导入的版本 2/3 分叉代码:

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
Run Code Online (Sandbox Code Playgroud)

笔记:

s_p*_*ike 7

我知道这是一个老问题,但我在这里跟踪了面包屑,所以也许仍然值得回答。它并不完全确定,但当前的 Pandas 文档建议使用内置方法StringIO而不是它自己的内部方法。

对于使用该类的示例StringIO,请确保使用from io import StringIOPython 3 导入它。


Mik*_*e T 6

仅供参考,从 pandas 0.25 开始,StringIO已从pandas.compat( PR #25954 ) 中删除,因此您现在将看到:

from pandas.compat import StringIO
Run Code Online (Sandbox Code Playgroud)

ImportError:无法从“pandas.compat”导入名称“StringIO”

这意味着唯一的答案是io模块导入。