2017-01-09 30 views
11
df 
    A  B 
0 a=10 b=20.10 
1 a=20 NaN 
2 NaN b=30.10 
3 a=40 b=40.10 

bir dataframe var olduğundahata astype kullanarak NaN denedim

ValueError: cannot convert float NaN to integer

Ve:

AttributeError: Can only use .str accessor with string values, which use np.object_ dtype in pandas

nasıl Bunu düzelttim mi?

+1

Öncelikle 'Eğer örnek dize ve bazıları için karışık dtypes sahip ikinci eğer, bu durumda int'' artığını olamaz böylece NaN' sadece şamandıra tarafından temsil edilebilir Başka bir şey daha sonra '' str.extract' kullanarak başarısız olur, ancak karışık dtypes desteklense de hatalara yol açtığı için iyi bir fikir değildir. Son dtype'ın ne olacağına karar vermeli ve size – EdChum

cevap

10

Sütundaki bazı değerler eksikse (NaN) ve sonra sayısal değere dönüştürülürse, her zaman dtype, float'dur. Değerleri int'a dönüştüremezsiniz. Sadece float, , NaN, float'dur.

print (type(np.nan)) 
<class 'float'> 

değerleri ise en az bir NaN dönüştürmek nasıl docs bakınız: Gerek int Eğer örneğin bazı int e NaN yerine ihtiyaç değerleri

integer > cast to float64

ise fillna tarafından 0 ve sonra mükemmel çalışıyor:

df['A'] = df['A'].str.extract('(\d+)', expand=False) 
df['B'] = df['B'].str.extract('(\d+)', expand=False) 
print (df) 
    A B 
0 10 20 
1 20 NaN 
2 NaN 30 
3 40 40 

df1 = df.fillna(0).astype(int) 
print (df1) 
    A B 
0 10 20 
1 20 0 
2 0 30 
3 40 40 

print (df1.dtypes) 
A int32 
B int32 
dtype: object 
+0

çalışmalarınızı anlam ifade eden eksik değerleri değiştirmelisiniz. Yardımın için çok teşekkürler. – Sun