この投稿に進む前に、NaNとNoneの違いを理解することが重要です。1つはフロート型で、もう1つはオブジェクト型です。Pandasは、スカラータイプの多くのメソッドをベクトル化できるため、スカラータイプの操作に適しています。PandasはNoneとNaNを一貫して処理しようとしますが、NumPyはできません。
私の提案(およびAndyの提案)は、NaNに固執することです。
しかし、あなたの質問に答えるために...
pandas> = 0.18:na_values=['-']引数を使用するread_csv
このデータをCSV / Excelから読み込んだ場合は、朗報です。後続のステップとしてコードを使用して修正を記述する代わりに、データのロード中にルートでこれを破棄できます。
ほとんどpd.read_*の機能(などread_csvとread_excel)受け入れna_values属性を。
file.csv
A,B
-,1
3,-
2,-
5,3
1,-2
-5,4
-1,-1
-,0
9,0
ここで、-文字をNaNに変換するには、次のようにします。
import pandas as pd
df = pd.read_csv('file.csv', na_values=['-'])
df
     A    B
0  NaN  1.0
1  3.0  NaN
2  2.0  NaN
3  5.0  3.0
4  1.0 -2.0
5 -5.0  4.0
6 -1.0 -1.0
7  NaN  0.0
8  9.0  0.0
そして、他の関数/ファイル形式についても同様です。
PS:v0.24 +では、列にNaNが含まれている場合でも、整数型を保持できます(はい、ケーキを持って食べることについても話します)。指定できますdtype='Int32'
df = pd.read_csv('file.csv', na_values=['-'], dtype='Int32')
df
     A    B
0  NaN    1
1    3  NaN
2    2  NaN
3    5    3
4    1   -2
5   -5    4
6   -1   -1
7  NaN    0
8    9    0
df.dtypes
A    Int32
B    Int32
dtype: object
dtypeは従来のint型ではなく、Nullable整数型です。他のオプションがあります。
数値データの処理:pd.to_numericwitherrors='coerce
数値データを扱っている場合、より高速な解決策はpd.to_numeric、errors='coerce'引数を使用することです。これにより、無効な値(数値にキャストできない値)がNaNに強制変換されます。
pd.to_numeric(df['A'], errors='coerce')
0    NaN
1    3.0
2    2.0
3    5.0
4    1.0
5   -5.0
6   -1.0
7    NaN
8    9.0
Name: A, dtype: float64
(null許容)整数dtypeを保持するには、
pd.to_numeric(df['A'], errors='coerce').astype('Int32')
0    NaN
1      3
2      2
3      5
4      1
5     -5
6     -1
7    NaN
8      9
Name: A, dtype: Int32 
複数の列を強制変換するには、次を使用しますapply。
df[['A', 'B']].apply(pd.to_numeric, errors='coerce').astype('Int32')
     A    B
0  NaN    1
1    3  NaN
2    2  NaN
3    5    3
4    1   -2
5   -5    4
6   -1   -1
7  NaN    0
8    9    0
...そして結果を後で割り当てます。
詳細については、この回答をご覧ください。
     
              
write_frame解析しませんか?NaNnone