314

リセットせずにa からnanand inf/-infの値を削除する最も簡単な方法は何ですか?pandas.DataFramemode.use_inf_as_null

次のように、欠落していると見なされる値を除いて、subsethowの引数を使用できるようにしたいと思います。dropnainf

df.dropna(subset=["col1", "col2"], how="all", with_inf=True)

これは可能ですか?欠損値の定義dropnaに含めるように指示する方法はありますか?inf

4

10 に答える 10

594

最も簡単な方法は、最初のreplace()infs を NaN にすることです。

df.replace([np.inf, -np.inf], np.nan, inplace=True)

そして、次を使用しdropna()ます。

df.replace([np.inf, -np.inf], np.nan, inplace=True) \
    .dropna(subset=["col1", "col2"], how="all")

例えば:

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

In [12]: df.replace([np.inf, -np.inf], np.nan, inplace=True)
Out[12]:
    0
0   1
1   2
2 NaN
3 NaN

シリーズでも同じ方法が機能します。

于 2013-07-04T21:50:51.893 に答える
17

.locシリーズで inf を nan に置き換えるために使用する別の方法を次に示します。

s.loc[(~np.isfinite(s)) & s.notnull()] = np.nan

したがって、元の質問への回答として:

df = pd.DataFrame(np.ones((3, 3)), columns=list('ABC'))

for i in range(3): 
    df.iat[i, i] = np.inf

df
          A         B         C
0       inf  1.000000  1.000000
1  1.000000       inf  1.000000
2  1.000000  1.000000       inf

df.sum()
A    inf
B    inf
C    inf
dtype: float64

df.apply(lambda s: s[np.isfinite(s)].dropna()).sum()
A    2
B    2
C    2
dtype: float64
于 2016-03-03T21:52:22.923 に答える
9

上記のソリューションはinf、ターゲット列にない を変更します。それを解消するには、

lst = [np.inf, -np.inf]
to_replace = {v: lst for v in ['col1', 'col2']}
df.replace(to_replace, np.nan)
于 2014-08-10T02:27:01.433 に答える
3

Nanとの両方を削除するにはinf、単一のコマンドを使用します。

df = df[ np.isfinite( df ).all( axis = 1) ]

何らかの理由で上記がうまくいかない場合は、次の 2 つの手順を試してください。

df = df[ ~( df.isnull().any( axis = 1 ) ) ] #to remove nan
df = df[ ~( df.isin( [np.inf, -np.inf]).any(axis =1) )] #to remove inf
于 2021-07-20T16:10:12.803 に答える
1

ここでの他の回答とは異なり、この1行のコードはうまくいきました。

import numpy as np
df= df[df['required_column_name']!= np.inf]
于 2022-02-01T10:08:21.783 に答える