#python #pandas
#python #pandas
Вопрос:
Я пытаюсь преобразовать несколько столбцов в моем df из string в int и float. Я использовал метод fillna, чтобы избавиться от значений NaN, однако я все еще получаю ошибку. Вот что я сделал:
df = [['column1', 'column2', 'column3', 'column4']]
df = df[['column1', 'column2', 'column3', 'column4']].fillna(0)
convert_dict = {'column1': int,
'column2': float,
'column3': int,
'column4': float}
df = df.astype(convert_dict)
Ошибка гласит ValueError: cannot convert float NaN to integer
Редактировать: удалено inplace=True
Комментарии:
1. У вас есть np.nan в столбце, который вы хотите преобразовать в int
2.
df = [[...]].fillna(0, inplace=True)
не имеет смысла. Я предполагаю, что вам не хватаетdf
там, и вам не нужно,inplace
если вы присваиваете результатdf
.3. @BEN_YO да. Работает ли np.nan с fillna?
4. следует ли использовать
df = df[['column1'...
вместоdf = [['column1'...
?5.
df = df.astype(convert_dict, errors = 'ignore')
должно сработать.
Ответ №1:
Вы могли бы использовать Int64
, который поддерживает пропущенные целочисленные значения:
import numpy as np
import pandas as pd
df = pd.DataFrame({'A': [1, 2, None, 4],
'B': [1.0, 2.0, 3.0, None]})
convert_dict = {'A': 'Int64', 'B': float}
convert_dict
for field, new_type in convert_dict.items():
df[field] = df[field].astype(new_type)
print(df)
print(df.dtypes)
A B
0 1 1.0
1 2 2.0
2 <NA> 3.0
3 4 NaN
A Int64
B float64
dtype: object