Преобразование нескольких столбцов из String в Float и Int

#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