Ответ 1
Если некоторые значения в столбце отсутствуют (NaN
), а затем преобразуются в числовые, всегда dtype
является float
. Вы не можете преобразовать значения в int
. Только float
, потому что type
NaN
float
.
print (type(np.nan))
<class 'float'>
См. Документы, как конвертировать значения, если хотя бы один NaN
:
integer> cast to float64
Если вам нужны значения int, вам нужно заменить NaN
на некоторый int
, например 0
fillna
а затем он отлично работает:
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