パンダでCSVから整数を読み取りながら、「NaN」値に適切にフォールバックするにはどうすればよいですか?

2015年05月12日に質問されました。  ·  閲覧回数 3.2k回  ·  ソース

danza picture
2015年05月12日

Pandasでread_csvを使用しているときに、特定の列をタイプに変換する場合、不正な形式の値は、問題のある値についての指示なしに、操作全体を中断します。

たとえば、次のようなものを実行します。

import pandas as pd
import numpy as np


df = pd.read_csv('my.csv', dtype={ 'my_column': np.int64 })

エラーで終わるスタックトレースにつながります:

ValueError: cannot safely convert passed user dtype of <i8 for object dtyped data in column ...

行番号、またはエラーメッセージに問題のある値がある場合、それを既知のNaN値のリストに追加できますが、この方法では何もできません。

その場合、失敗を無視してnp.nanを返すようにパーサーに指示する方法はありますか?

スクリプト後:おかしなことに、型の提案なしで解析した後( dtype引数なし)、 d['my_column'].value_counts()dtype権利を推測し、 np.nanを自動的に正しく配置するようです、シリーズの実際のdtypeは一般的なobjectですが、ほとんどすべてのプロットおよび統計操作で失敗します。

回答

danza picture
2015年05月12日
8

コメントのおかげで、整数にはNaNがないこと

import pandas as pd
import numpy as np


df = pd.read_csv('my.csv', dtype={ 'my_column': np.float64 })

これにより、失敗した変換の値を含む理解可能なエラーメッセージが表示されたため、失敗した値をna_values追加できました。

df = pd.read_csv('my.csv', dtype={ 'my_column': np.float64 }, na_values=['n/a'])

このようにして、視覚化および統計機能で機能する方法で最終的にCSVをインポートできます。

>>>> df['session_planned_os'].dtype
dtype('float64')

適切なna_valuesを見つけたら、 read_csvからdtype引数を削除できます。 型推論が正しく行われるようになりました。

df = pd.read_csv('my.csv', na_values=['n/a'])