seleccionar - python y pandas
Pandas ''describe'' no está devolviendo resumen de todas las columnas (6)
Estoy ejecutando ''describe ()'' en un marco de datos y obteniendo resúmenes de solo columnas int (pandas 14.0).
La documentación dice que para las columnas de objetos la frecuencia es el valor más común y se devolverán estadísticas adicionales. ¿Qué podría estar mal? (Por cierto, no se devuelve ningún mensaje de error)
Editar:
Creo que es así como la función está configurada para comportarse en tipos de columnas mixtas en un marco de datos. Aunque la documentación no lo menciona.
Código de ejemplo:
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()
Mi feo trabajo alrededor mientras tanto:
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()
''describe ()'' en un DataFrame solo funciona para tipos numéricos. Si crees que tienes una variable numérica y no aparece en ''decribe ()'', cambia el tipo con:
df[[''col1'', ''col2'']] = df[[''col1'', ''col2'']].astype(float)
También puede crear nuevas columnas para manejar la parte numérica de una columna de tipo mixto, o convertir cadenas en números usando un diccionario y la función map ().
''describe ()'' en una serie no numérica le dará algunas estadísticas (como el valor de conteo, único y el que ocurre con mayor frecuencia).
A partir de pandas v15.0, use el parámetro DataFrame.describe(include = ''all'')
para obtener un resumen de todas las columnas cuando el marco de datos tiene tipos de columnas mixtas . El comportamiento predeterminado es proporcionar solo un resumen para las columnas numéricas.
Ejemplo:
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
Las columnas numéricas tendrán NaN para estadísticas de resumen pertenecientes a objetos (cadenas) y viceversa.
Resumiendo solo columnas numéricas o de objeto
- Para llamar a
describe()
solo en las columnas numéricas usedescribe(include = [np.number])
Para llamar a
describe()
solo en los objetos (cadenas) usandodescribe(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
Además de DataFrame.describe(include = ''all'')
, también se puede usar Series.value_counts()
para cada columna categórica:
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
El método .describe () solo funciona en columnas que tienen tipos de datos numéricos. Puede comprobar los tipos de datos de columnas por
df.dtypes()
Para obtener el resumen de descripción de todas las columnas use,
df.describe(include=''all'')
Esto le dará una descripción de todas las columnas.
Puede ejecutar df_test.info()
para obtener la lista de tipos de datos que contiene su marco de datos. Si su marco de datos contiene solo columnas numéricas, df_test.describe () funcionará perfectamente bien. Como por defecto, proporciona el resumen de los valores numéricos. Si desea el resumen de sus características de Objeto (Cadena), puede usar df_test.describe(include=[''O''])
.
O, en resumen, puede usar df_test.describe(include=''all'')
para obtener un resumen de todas las columnas de características cuando su marco de datos tiene columnas de varios tipos de datos.
pd.options.display.max_columns = DATA.shape[1]
funcionará.
Aquí DATA
es una matriz 2d, y el código anterior mostrará las estadísticas verticalmente.