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

Should we use pandas.compat.StringIO or Python 2/3 StringIO?

StringIO 是我们在从文本中读取 pandas 数据帧时使用的类文件字符串缓冲区对象,例如"How to create a Pandas DataFrame from a string?"

我们应该将这两个导入中的哪一个用于 StringIO(在 pandas 内)? 这是一个长期的问题 - 运行 从未解决过四年多了。

  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

注:

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

For examples that use the StringIO class, make sure you import it with from io import StringIO for Python 3.

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

from pandas.compat import StringIO

ImportError: cannot import name 'StringIO' from 'pandas.compat'

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