2016-11-07 4 views
3

文字列形式(型:str)とNaN(型:float64)の2桁の数値を含む列の変換に問題があります。私はこのようにして新しい列を取得したい:NaNとそこには2桁の数字が文字列形式である整数値があった。一例として、 :私はこの試みている文字列とNaN(浮動小数点数)の列を整数に変換してNaNを保持する

YearBirth1 #numbers here are formatted as strings: type(YearBirth1[0])=str 
     34 # and NaN are floats: type(YearBirth1[2])=float64. 
     76 
     Nan 
     09 
     Nan 
     91 

YearBirth2 #numbers here are formatted as integers: type(YearBirth2[0])=int 
     34 #NaN can remain floats as they were. 
     76 
     Nan 
     9 
     Nan 
     91 

csv['YearBirth2'] = (csv['YearBirth1']).astype(int) 

をそして私は、私はこのエラーました予想通り:

ValueError: cannot convert float NaN to integer 
を私はこのようなコラムYearBirth1から列Yearbirth2を取得したいです

私はこれを試しました:

csv['YearBirth2'] = (csv['YearBirth1']!=NaN).astype(int) 

そして、このエラーを得た:

NameError: name 'NaN' is not defined 

は、最後に私はこれを試してみました:

csv['YearBirth2'] = (csv['YearBirth1']!='NaN').astype(int) 

NOエラーが、私は列YearBirth2をチェックすると、これは結果であった:

YearBirth2: 
     1 
     1 
     1 
     1 
     1 
     1 

非常に悪い..私は考えが正しいと思いますが、PythonがNaNの意味を理解できるようにするための問題があります。あるいは、試した方法が間違っています。

私も使用しpd.to_numeric()メソッドが、私は山車、整数ではない...

すべてのヘルプを得るこの方法! 皆様に感謝します!

P.S:csvは自分のDataFrameの名前です。 申し訳ありませんが私ははっきりしていない場合、私は英語で改善しています!

+1

さて、あなたは山車を受け入れるか、またはNaNの山車残っている場合、整数 – EdChum

+0

[OK]を、問題なしで表すことができるものと 'NaN'を交換する必要があるので、' NaN'が整数で表現できない、することはできませんが、私は "文字列2桁の数字" intに変換され、浮動小数点ではない、それは本当に不可能ですか? –

+2

パンダでは不可能ですが、通常はdtypeを混在させることができますが、純粋な数値型の場合、dtypeは同質である必要があります。元の列に文字列があり、 'NaN'が許されています。int、文字列、浮動小数点があればこれが許されますが、純粋な数値列はすべてints/floatでなければなりません。 – EdChum

答えて

5

あなたはto_numericを使用していますが、NaN値でintを得ることは不可能であることができます - 彼らは常にfloatに変換されます:see na type promotions

df['YearBirth2'] = pd.to_numeric(df.YearBirth1, errors='coerce') 
print (df) 
    YearBirth1 YearBirth2 
0   34  34.0 
1   76  76.0 
2  Nan   NaN 
3   09   9.0 
4  Nan   NaN 
5   91  91.0 
+0

私はpd.to_numericも試したことを忘れていますが、この方法では整数ではなく浮動小数点が得られます。 –

関連する問題