【问题标题】:Should we use pandas.compat.StringIO or Python 2/3 StringIO?我们应该使用 pandas.compat.StringIO 还是 Python 2/3 StringIO?
【发布时间】:2018-10-21 08:06:37
【问题描述】:

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

注意:

【问题讨论】:

  • cc: @Jeff jreback ...
  • 缺乏标准导致confusionbreakage
  • 我认为这主要是基于意见。所有方法都有效,因此请使用您觉得最舒服的一种。当我回答引用的问题时,我使用 sn-p 来展示在 Python 3 和 Python 2 中使用什么。4 年后的今天,我只使用 Python 3,所以这对我来说不是问题。 Stackoverflow 可能不是在这方面推动标准的地方。如果在 pandas 问题跟踪器上提出问题很重要?
  • @EmilH:这不是基于意见的,这取决于熊猫开发者是否计划改变他们对pandas.compat 的指导。我们甚至不需要pandas.compat 中的所有东西都保持稳定,只需要我命名的标识符,但无论如何它自late 2015 以来一直是稳定的,所以他们的警告过于严重
  • @smci 我同意今天他们的警告过于严重(至少对于StringIO)。但是,无论 pandas 开发人员对以下问题的看法如何:我们应该将这两个导入中的哪一个用于 StringIO(在 pandas 内)? 答案仍然基于意见。如果问题是:是否有官方推荐的方式来使用StringIO(在 pandas 中)? 这不是基于意见的,但是阅读文档,目前的建议仍然是不使用 @ 987654340@(尽管可以说是获取StringIO 的一种更清洁的方式)。

标签: pandas import backwards-compatibility stringio python-2to3


【解决方案1】:

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

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

【讨论】:

  • 是的,这就是这些天的答案。 (我本打算在几年前自行回答并关闭)
【解决方案2】:

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

from pandas.compat import StringIO

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

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

【讨论】:

  • 感谢 MikeT 的更新
猜你喜欢
  • 2023-03-06
  • 1970-01-01
  • 2019-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多