修正方法: valueerror: float nan を int に変換できません


pandas の使用時に発生する可能性のあるエラーは次のとおりです。

 ValueError : cannot convert float NaN to integer

このエラーは、列に NaN 値が含まれている場合に、pandas DataFrame の列を浮動小数点から整数に変換しようとすると発生します。

次の例は、このエラーを実際に修正する方法を示しています。

エラーを再現する方法

次のパンダ データフレームを作成するとします。

 import pandas as pd
import numpy as np

#createDataFrame
df = pd. DataFrame ({' points ': [25, 12, 15, 14, 19, 23, 25, 29],
                   ' assists ': [5, 7, 7, 9, 12, 9, 9, 4],
                   ' rebounds ': [11, np. no , 10, 6, 5, np. no , 9, 12]})

#view DataFrame
df

        points assists rebounds
0 25 5 11
1 12 7 NaN
2 15 7 10
3 14 9 6
4 19 12 5
5 23 9 NaN
6 25 9 9
7 29 4 12

現在、「bounces」列は「float」データ型です。

 #print data type of 'rebounds' column
df[' rebounds ']. dtype

dtype('float64')

「bounces」列を浮動小数点数から整数に変換しようとしているとします。

 #attempt to convert 'rebounds' column from float to integer
df[' rebounds '] = df[' rebounds ']. astype (int)

ValueError : cannot convert float NaN to integer 

「バウンス」列の NaN 値は整数値に変換できないため、 ValueError が返されます。

エラーを修正する方法

このエラーを修正する方法は、列を浮動小数点から整数に変換する前に NaN 値を処理することです。

次のコードを使用して、最初に NaN 値を含む行を特定できます。

 #print rows in DataFrame that contain NaN in 'rebounds' column
print (df[df[' rebounds ']. isnull ()])

   points assists rebounds
1 12 7 NaN
5 23 9 NaN

その後、列を浮動小数点から整数に変換する前に、NaN 値を含む行を削除するか、NaN 値を別の値に置き換えることができます。

方法 1: NaN 値を含む行を削除する

 #drop all rows with NaN values
df = df. dropna ()

#convert 'rebounds' column from float to integer
df[' rebounds '] = df[' rebounds ']. astype (int) 

#view updated DataFrame
df
	points assists rebounds
0 25 5 11
2 15 7 10
3 14 9 6
4 19 12 5
6 25 9 9
7 29 4 12

#view class of 'rebounds' column
df[' rebounds ']. dtype

dtype('int64')

方法 2: NaN 値を置換する

 #replace all NaN values with zeros
df[' rebounds '] = df[' rebounds ']. fillna ( 0 )

#convert 'rebounds' column from float to integer
df[' rebounds '] = df[' rebounds ']. astype (int) 

#view updated DataFrame
df

	points assists rebounds
0 25 5 11
1 12 7 0
2 15 7 10
3 14 9 6
4 19 12 5
5 23 9 0
6 25 9 9
7 29 4 12

#view class of 'rebounds' column
df[' rebounds ']. dtype

dtype('int64')

どちらの方法でもValueErrorを回避し、浮動小数点列を整数列に正常に変換できることに注意してください。

追加リソース

次のチュートリアルでは、Python の他の一般的なエラーを修正する方法を説明します。

修正方法: 列が重なっていますが、サフィックスが指定されていません
修正方法: オブジェクト「numpy.ndarray」には「append」属性がありません
修正方法: すべてのスカラー値を使用する場合は、インデックスを渡す必要があります。

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です