Pandas 'describe' не возвращает резюме всех столбцов

Я запускаю 'describe()' в dataframe и получаю резюме только int-столбцов (pandas 14.0).

В документации указано, что для столбцов столбцов частота наиболее распространенного значения и дополнительная статистика будут возвращены. Что может быть неправильным? (кстати, сообщение об ошибке не возвращается)

Редактировать:

Я думаю, что эта функция настроена на поведение смешанных типов столбцов в фрейме данных. Хотя документация не упоминает об этом.

Пример кода:

df_test = pd.DataFrame({'$a':[1,2], '$b': [10,20]})
df_test.dtypes
df_test.describe()
df_test['$a'] = df_test['$a'].astype(str)
df_test.describe()
df_test['$a'].describe()
df_test['$b'].describe()

Между тем моя уродливая работа:

def my_df_describe(df):
    objects = []
    numerics = []
    for c in df:
        if (df[c].dtype == object):
            objects.append(c)
        else:
            numerics.append(c)

    return df[numerics].describe(), df[objects].describe()

Ответ 1

Начиная с pandas v15.0, используйте параметр DataFrame.describe(include = 'all') чтобы получить сводку всех столбцов, когда в фрейме данных имеются смешанные типы столбцов. Поведение по умолчанию заключается только в сводке для числовых столбцов.

Пример:

In[1]:

df = pd.DataFrame({'$a':['a', 'b', 'c', 'd', 'a'], '$b': np.arange(5)})
df.describe(include = 'all')

Out[1]:

        $a    $b
count   5   5.000000
unique  4   NaN
top     a   NaN
freq    2   NaN
mean    NaN 2.000000
std     NaN 1.581139
min     NaN 0.000000
25%     NaN 1.000000
50%     NaN 2.000000
75%     NaN 3.000000
max     NaN 4.000000

Численные столбцы будут иметь NaN для сводной статистики, относящейся к объектам (строки) и наоборот.

Обобщение только числовых или объектных столбцов

  1. Для вызова функции describe() только для числовых столбцов используйте describe(include = [np.number])
  2. Чтобы вызвать describe() только для объектов (строк), используя describe(include = ['O']).

    In[2]:
    
    df.describe(include = [np.number])
    
    Out[3]:
    
             $b
    count   5.000000
    mean    2.000000
    std     1.581139
    min     0.000000
    25%     1.000000
    50%     2.000000
    75%     3.000000
    max     4.000000
    
    In[3]:
    
    df.describe(include = ['O'])
    
    Out[3]:
    
        $a
    count   5
    unique  4
    top     a
    freq    2
    

Ответ 2

'describe()' в DataFrame работает только для числовых типов. Если вы считаете, что у вас есть числовая переменная, и она не отображается в 'decribe()', измените тип с помощью:

df[['col1', 'col2']] = df[['col1', 'col2']].astype(float)

Вы также можете создавать новые столбцы для обработки числовой части столбца типа микширования или преобразования строк в числа с помощью словаря и функции map().

"Описать()" на нечисловой серии даст вам некоторую статистику (например, счет, уникальное и наиболее часто встречающееся значение).

Ответ 3

pd.options.display.max_columns = DATA.shape[1] будет работать.

Здесь DATA является 2d-матрицей, а выше код будет отображать статистику по вертикали.

Ответ 4

В дополнение к DataFrame.describe(include = 'all') также можно использовать Series.value_counts() для каждого категориального столбца:

In[1]:

df = pd.DataFrame({'$a':['a', 'b', 'c', 'd', 'a'], '$b': np.arange(5)})
df['$a'].value_counts()

Out[1]:
$a
a    2
d    1
b    1
c    1

Ответ 5

Вы можете выполнить df_test.info() чтобы получить список типов данных, которые содержит ваш фрейм данных. Если ваш фрейм данных содержит только числовые столбцы, то df_test.describe() будет работать отлично. По умолчанию он предоставляет сводку числовых значений. Если вам нужна сводка объектов Object (String), вы можете использовать df_test.describe(include=['O']).

Или, короче говоря, вы можете просто использовать df_test.describe(include='all') чтобы получить сводку всех столбцов функций, когда в вашем кадре данных есть столбцы различных типов данных.

Ответ 6

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

Другие ответы указывают на то, что параметр include="all" description может помочь с проблемой типа данных. Другой вопрос, заданный " Как расширить выводной дисплей, чтобы увидеть больше столбцов? " Решение состоит в том, чтобы изменить параметр display.max_columns, что можно сделать даже временно. Например, чтобы отобразить до 40 столбцов вывода из одного оператора describe:

with pd.option_context('display.max_columns', 40):
    print(df.describe(include='all'))

Ответ 7

Метод .describe() работает только со столбцами, имеющими числовые типы данных. Вы можете проверить типы данных столбцов по

df.dtypes()

Чтобы получить описание описания всех столбцов, используйте,

df.describe(include='all')

Это даст вам описание всех столбцов.