Как заменить нулевые значения в столбцах специальными символами в pandas

#python #pandas #replace

#python #pandas #заменить

Вопрос:

У меня есть фрейм данных с именем столбца, как показано ниже:

 Column (Name)     Column Name 2   Column3   Column (4)
NULL                 NULL             C3       100
22                    C44            C55       NULL
2                      C5            C11       13
 

Я хочу заменить нулевые значения из подмножества, скажем Column (Name) , и Column (4) на средние и минимальные значения. Как это сделать? Значения в Column (Name) и Column (4) являются числовыми

  df['Column (Name)']=df['Column (Name)'].fillna(df['Column (Name)'].mean())
 df['Column (4)']=df['Column (4)'].fillna(df['Column (4)'].min())
 

Я получаю сообщение об ошибке ниже:

 TypeError: can only concatenate str (not "int") to str
 

Ожидаемый результат:

  Column (Name)     Column Name 2   Column3   Column (4)
    12                 NULL            C3        100
    22                  C44           C55        13
    2                    C5              C11       13
 

Ответ №1:

Ваша ошибка означает, что в столбце есть некоторые нечисловые значения.

Проверьте, являются ли столбцы числовыми, если нет, преобразуйте их в df.dtypes:

 print(df.dtypes)
 

Затем вы можете проверить, какие значения неверны:

 print (df.loc[pd.to_numeric(df['Column (Name)'], errors='coerce').isna(), 'Column (Name)'])
 

И последнее преобразование в числовое:

 df['Column (Name)'] = pd.to_numeric(df['Column (Name)'], errors='coerce')
df['Column (4)'] = pd.to_numeric(df['Column (4)'], errors='coerce')
 

Или, если хотите преобразовать несколько столбцов:

 cols = ['Column (Name)','Column (4)']
df[cols] = df[cols].apply(pd.to_numeric, errors='coerce')
 

А затем используйте ваше решение:

 df['Column (Name)']=df['Column (Name)'].fillna(df['Column (Name)'].mean())
df['Column (4)']=df['Column (4)'].fillna(df['Column (4)'].min())
 

Или вы можете использовать DataFrame.agg :

 df = df.fillna(df.agg({'Column (Name)':'mean', 'Column (4)':'min'}))
print (df)
   Column (Name) Column Name 2 Column3  Column (4)
0           12.0           NaN      C3       100.0
1           22.0           C44     C55        13.0
2            2.0            C5     C11        13.0
 

Ответ №2:

На самом деле, используя ваш код, у меня нет ошибки. Пожалуйста, сравните с моим кодом dtypes .

 import io
import pandas as pd
 

Чтение ваших данных.

 df = pd.read_csv(io.StringIO("""
Column (Name)     Column Name 2   Column3   Column (4)
NULL                 NULL             C3       100
22                    C44            C55       NULL
2                      C5            C11       13
"""), sep="ss ", engine="python")
 

Проверьте типы данных.

 df.dtypes

Column (Name)    float64
Column Name 2     object
Column3           object
Column (4)       float64
dtype: object
 

Код для заполнения означает и мин.

 df['Column (Name)']=df['Column (Name)'].fillna(df['Column (Name)'].mean())
df['Column (4)']=df['Column (4)'].fillna(df['Column (4)'].min())
 

Заполненные значения равны 12.0 и 13.0.

Комментарии:

1. Типы данных являются объектами

Ответ №3:

Эта ошибка возникает при попытке объединить строку и целое число. Вы можете объединить только в том случае, если существует тот же тип. Попробуйте преобразовать целые числа в строку с помощью метода str().