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 для сводной статистики, относящейся к объектам (строки) и наоборот.
Обобщение только числовых или объектных столбцов
- Для вызова функции
describe()
только для числовых столбцов используйте describe(include = [np.number])
-
Чтобы вызвать 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')
Это даст вам описание всех столбцов.