【问题标题】:Pandas read_csv: convert specific string to numpy.infPandas read_csv:将特定字符串转换为 numpy.inf
【发布时间】:2016-07-17 02:07:44
【问题描述】:

我有一个 csv 数据文件。这些值是浮点数,但无限值除外,由字符串“INFINITE”表示。这样的值可以出现在任何列中。

我想将 'INFINITE' 字符串值转换为 numpy.inf

使用 numpy genfromtxt 函数,我可以执行以下操作:

dataparams={'delimiter':"\t",
            'skip_header':1,
            'names':True,
            'missing_values':'INFINITE',
            'filling_values':np.inf}

data = np.genfromtxt(file,**dataparams)

我想对 pandas read_csv 做同样的事情。

我可以使用 na_values='INFINITE' 将“INFINITE”字符串转换为 NaN,但这不是我想要的。 Pandas 文档表明 pandas>0.10 支持 inf 值,但我在读取文件时无法弄清楚如何进行转换。在 pandas 中是否有一种简单的方法可以做到这一点?

【问题讨论】:

  • 我不认为read_csv 支持将此作为参数 arg 您必须将其作为后处理步骤或定义转换器函数并将其传递给 converters 参数跨度>
  • 或者您更愿意在通过na_values='INFINITE' 后仅调用fillna(np.inf) 作为后处理步骤
  • 我不想将 'INFINITE' 映射到 NaN。数据集中可能存在缺失值。我想区分无限值和缺失值。
  • 然后你必须调用replace 或将映射到某个用户定义方法的字典传递给converters 参数read_csv
  • 这行得通:pd.read_csv(file,sep='\t',header=1).replace('INFINITE',np.inf) 对于大文件可能不是很有效。我一直在尝试使用转换器参数来做到这一点,但我不知道如何为所有列编写转换器。

标签: python pandas


【解决方案1】:

聚会有点晚了,但在How to wrap a Python text stream to replace strings on the fly? 我用TextIOBase 的包装解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-06
    • 1970-01-01
    • 2016-11-02
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 2013-05-25
    • 2016-08-30
    相关资源
    最近更新 更多