Как бороться с отсутствующими значениями в Pandas DataFrame? - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть Pandas Dataframe, в котором отсутствуют некоторые значения.Я хотел бы заполнить пропущенные значения чем-то, что не влияет на статистику, которую я буду делать с данными.

Например, если в Excel вы пытаетесь усреднить ячейку, которая содержит 5 и пустуюячейка, среднее значение будет 5. Я хотел бы иметь то же самое в Python.

Я попытался заполнить NaN, но если я, например, суммирую определенный столбец, результат будет NaN,Я также пытался заполнить None, но получаю ошибку, потому что я суммирую разные типы данных.

Может кто-нибудь помочь?Заранее спасибо.

Ответы [ 4 ]

0 голосов
/ 04 августа 2019

Если вы хотите изменить тип данных любого конкретного столбца с пропущенными значениями, заполненными 'nan' для любой статистической операции, которую вы можете просто использовать ниже строки кода, он преобразует все значения этого столбца в числовой тип и всепропущенные значения автоматически заменяются на 'nan', и это не повлияет на вашу статистическую операцию.

df['column_name'] = pd.to_numeric(df['column_name'], errors='coerce')

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

for i in df.columns:
   df[i] = pd.to_numeric(df[i], errors='coerce')
0 голосов
/ 10 февраля 2019

Ответ на ваш вопрос заключается в том, что пропущенные значения работают в Pandas иначе, чем в Excel.Вы можете прочитать о технических причинах этого здесь .По сути, не существует магического числа, которым мы могли бы заполнить df, из-за которого Панды просто пропускают его.В зависимости от наших потребностей мы иногда решаем заполнить пропущенные значения, иногда отбрасывать их (либо навсегда, либо на время расчета), либо иногда использовать методы, которые могут с ними работать (например, numpy.nansum, как Филипп Рискалла)Лил упоминается).

0 голосов
/ 10 февраля 2019

Вы можете использовать df.fillna ().Вот пример того, как вы можете сделать то же самое.

import pandas as pd
import numpy as np
df = pd.DataFrame([[np.nan,2,1,np.nan],
              [2,np.nan,3,4],
              [4,np.nan,np.nan,3],
              [np.nan,2,1,np.nan]],columns=list('ABCD'))
df.fillna(0.0)

Как правило, заполнение значения чем-то вроде 0 повлияет на статистику, которую вы делаете для ваших данных.Так что выбирайте среднее значение данных, чтобы убедиться, что оно не повлияет на вашу статистику.Итак, используйте df.fillna (df.mean ()) вместо

0 голосов
/ 10 февраля 2019

есть много ответов на два ваших вопроса.

Вот решение для вашего первого:

Если вы хотите вставить определенное значение в ваши записи NaN в кадре данных, которое не изменит вашу статистику, тогда я бы предложил вамиспользуйте для этого среднее значение этих данных.

Пример:

df # your dataframe with NaN values

df.fillna(df.mean(), inplace=True)

Для второго вопроса:

Если вам нужно проверить описательную статистику из вашего фрейма данных, ичто описательная статистика не должна зависеть от значений NaN, вот два решения для этого: 1)

df # your dataframe with NaN values

df.fillna(df.mean(), inplace=True)

df.mean()
df.std()

# or even:

df.describe()

2) Вариант 2:

Я бы предложил вам использовать NumPy Nanтакие функции, как (numpy.nansum, numpy.nanmean, numpy.nanstd) ...

df.apply (numpy.nansum)

df.apply (numpy.nanstd) # ...

...