将Inf替换为NaN会导致AttributeError错误。

4

我在Pandas中遇到了一个奇怪的问题。我想用值np.NaN替换任何具有np.Inf的条目。但当我这样做时:

df[df == np.Inf] = np.NaN

I get:

AttributeError: 'float' object has no attribute 'view'

导致错误的语句是:

df == np.Inf

我想知道问题是否在于我正在对一个类型混合的Dataframe运行上述代码(参见下方的dtypes)。但是如果是这种情况,我该如何自动完成这个替换操作呢?

In: df.dtypes
Out:
Year                            int64
Week                            int64
item_name                      object
item_uid                       object
Algorithm                      object
item Start                    float64
item 1/4                      float64
item 1/2                      float64
item 3/4                      float64
item Complete                 float64
Daily Nr Impressions          float64
date                   datetime64[ns]
Weekly rate                   float64
dtype: object

你的代码应该是可以工作的,你能否提供一些数据以重现错误? - EdChum
我刚刚测试了你的原始代码,它可以正常工作(Python 2.7 pandas 0.13.1)... - Ffisegydd
@Ffisegydd 和 Edchum。df.replace 确实起作用了,但不是我在 OP 中包含的代码。我会尝试在 OP 中包含数据。 - Amelio Vazquez-Reina
1个回答

15

您可以使用df.replace函数来替换np.inf的值。

In [9]: import pandas as pd

In [10]: df = pd.DataFrame([1, 2, np.inf])

In [11]: df.replace(np.inf, np.nan)
Out[11]:
    0
0   1
1   2
2 NaN

[3 rows x 1 columns]

4
FYI: “df[~np.isfinite(df)] = np.nan” 是正确的索引习惯用语。 - Jeff
1
另外,“df [df == np.inf] = np.nan”在master / 0.14中确实有效,但在0.13.1中无效。我记得在某个地方修复过这个问题。 - Jeff
2
不要忘记-np.inf!所以最好这样做:df.replace([np.inf,-np.inf],np.nan) - kadee
使用Jeff的第一个示例,可以找到“-np.inf”。 - Little Bobby Tables

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接