2016-12-30 77 views
1

.map()を使用して、DataFrame内で列のデータ型をtype: objectからtype: int64に変更しようとしています。これが正常に完了しPandas DataFrameの列タイプをint64に変更

def convert_to_int_with_error(x): 
    if not x in ['', None, ' ']: 
     try: 
      return np.int64(x) 
     except ValueError as e: 
      print(e) 
      return None 
    else: 
     return None 

    if not type(x) == np.int64(): 
     print("Not int64") 
     sys.exit() 

df['one'] = df['one'].map(convert_to_int_with_error) 

は、ここに私の関数です。私が完了した後にデータの種類を確認する場合しかし、それはtype: floatに戻ります:

print("%s is a %s after converting" % (key, df['one'].dtype)) 
+0

はどこ正確には'(x)は== np.int64を入力しない場合は()を入れたのですか?あなたは 'convert_to_int_with_error'が決して' None'を返さないと言っていますか? – unutbu

+1

数値コンテナの場合、 'None'は' float'(数値)dtypeを維持するために 'NaN'とみなされます。そのような欠損値/空の文字列を処理する方法を見つける必要があります。その結果、 'np.int64' dtypeとなります。 –

答えて

1

私は問題があなたの問題の値がNoneからNaNに変換されるので、intfloatにキャストされていると思う - docsを参照してください。

代わりmapあなたはNaNに変換する問題の値のパラメータerrors='coerce'to_numericを使用することができます: `条件:

df['one'] = pd.to_numeric(df['one'], errors='coerce') 
+0

int64に正しく変換できなかった値のためのtryとexceptを説明しましたか? – Scott

+1

残念ながら 'NaN'または' None'値で 'dtype'' int'を使うことはできません。 – jezrael

関連する問題