【发布时间】: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)对于大文件可能不是很有效。我一直在尝试使用转换器参数来做到这一点,但我不知道如何为所有列编写转换器。