質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

18690閲覧

ValueError: Cannot convert non-finite values (NA or inf) to integerを解決したいです。

jury_new

総合スコア31

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/06/22 01:14

ValueError: Cannot convert non-finite values (NA or inf) to integer
というエラーが出ていて解決方法についてご教示いただけると幸いです。
エラーに関して調べたところ、欠陥値があるため変換のエラーを起こしている?とのことだったのですがどこの欠陥値が作用しているのかがわかりません。

念のため意味があるかわかりませんが詳細です;
killed_byは何によって死んだかを表しており、基本的には銃がほとんどです。今回はその銃の識別を数字に置き換え分類しようと考えています。

###実行したいコードの部分

show_df['gan_type'] = show_df['killed_by'].map({'Deagle':1,'P1911':2,'R45':3,'R1895':4,'P18C':5,'P92':6,\ 'Skorpion':7,'S12K':8,'S1897':9,'S686':10,'DBS':11,'Tommy Gun':12,\ 'Vector':13,'Micro UZI':14,'MP5K':15,'PP-19 Bizon':16,'UMP45':17,\ 'AUG':18,'G36C':19,'M16A4':20,'M416':21,'M762':22,'Mk47 Mutant':23,\ 'QBZ':24,'SCAR-L':25,'AKM':26,'GROZA':27,'M249':28,'DP-28':29,\ 'AWM':30,'Win94':31,'Kar98K':32,'M24':33,'mini14':34,'QBU':35,'Mk14':36,'SKS':37,\ 'SLR':38,'VSS':39,'Bluezone':40,'Down and Out':41,'Falling':42}).astype(int)

###コードの全体像

import pandas as pd import matplotlib.pyplot as plt import numpy as np import seaborn as sns df = pd.read_csv("csvまでのパス") show_df = df.drop(['victim_position_x','victim_position_y','victim_placement','killer_placement','killer_name'],axis=1) #欠陥値の補足 show_df['kill_position_x'] = show_df['killer_position_x'].fillna(show_df['killer_position_x'].mean()) show_df['kill_position_y'] = show_df['killer_position_y'].fillna(show_df['killer_position_y'].mean()) print(show_df[show_df.isnull().any(1)].head(10)) #日本語表記は検討 ソードオブショットガン,クロスボウ、グレネード、火炎瓶、フライパン、鎌、バール、マチェット show_df['gan_type'] = show_df['killed_by'].map({'Deagle':1,'P1911':2,'R45':3,'R1895':4,'P18C':5,'P92':6,\ 'Skorpion':7,'S12K':8,'S1897':9,'S686':10,'DBS':11,'Tommy Gun':12,\ 'Vector':13,'Micro UZI':14,'MP5K':15,'PP-19 Bizon':16,'UMP45':17,\ 'AUG':18,'G36C':19,'M16A4':20,'M416':21,'M762':22,'Mk47 Mutant':23,\ 'QBZ':24,'SCAR-L':25,'AKM':26,'GROZA':27,'M249':28,'DP-28':29,\ 'AWM':30,'Win94':31,'Kar98K':32,'M24':33,'mini14':34,'QBU':35,'Mk14':36,'SKS':37,\ 'SLR':38,'VSS':39,'Bluezone':40,'Down and Out':41,'Falling':42}).astype(int) two = print(new_df.head(10)) #sns.pairplot(two[0:101],hue='killed_by') #plt.one() #one = df[df['killed_by'=='M416']]

###エラー

Traceback (most recent call last): File "kill.py", line 20, in <module> 'SLR':38,'VSS':39,'Bluezone':40,'Down and Out':41,'Falling':42}).astype(int) 一部省略〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 raise ValueError("Cannot convert non-finite values (NA or inf) to integer") ValueError: Cannot convert non-finite values (NA or inf) to integer

この処理を行いたいのですが、エラーで止まってしまっています。
自分なりに考えこのように実行してみました、
0. killed_byの列に欠陥値があるかと考えisnallで検索しようとしましたが、こちらもエラーが出ました。列を指定してnullを検索できない?ため.headで10行ほど確認しましたが特に問題はなさそうでした。
0. 他の列にnullがあるため実行できない?と考え、他の列の欠陥値を補うようにするため以下のコードを記述しました。

show_df['kill_position_x'] = show_df['killer_position_x'].fillna(show_df['killer_position_x'].mean()) show_df['kill_position_y'] = show_df['killer_position_y'].fillna(show_df['killer_position_y'].mean()) print(show_df[show_df.isnull().any(1)].head(10))

ですが、エラーはそのままで変化はありませんでした。このコードがそもそも正しく欠陥値を変換できているのかということも疑問です。また、この処理が上手くいったとしてタイトルのエラーが改善されるかという点についても疑問です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

NaNを生み出しているのはmap関数のところと思います。したがって欠損値に対する処理はmap関数以降で行う必要があります。以下簡単な検証です。

python

1df = pd.DataFrame({"name": ["a", "b", "c", "d", "e"]}) 2s = df["name"].map({"a": 1, "b": 2, "c": 3}) 3print(s)

a, b, c, d, e全てに変換値が定義されていればint型になります。一部に変換値がないため、NaNを持つ不動小数点型が適用されています。

terminal

10 1.0 21 2.0 32 3.0 43 NaN 54 NaN 6Name: name, dtype: float64

欠損値の箇所を確認する場合はisnull()で確認できます。

python

1print(df[s.isnull()])

結果

terminal

1 name 23 d 34 e

投稿2020/06/22 03:29

yymmt

総合スコア1615

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jury_new

2020/06/22 04:24

yymmtさんご回答ありがとうございます! なるほど、map関数のところだったんですね。 見直して改善しようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問