熊猫“描述”不会返回所有列的摘要

我在一个数据框架上运行‘ description ()’,并且只得到 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()
132277 次浏览

DataFrame 上的“ description ()”只适用于数值类型。如果您认为您有一个数值变量,但它没有出现在‘ decribe ()’中,那么可以使用以下方法更改类型:

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

您还可以创建新列来处理混合类型列的数字部分,或者使用 dictionary 和 map ()函数将字符串转换为数字。

在非数值序列上的‘ description ()’将给出一些统计信息(如计数、唯一值和最常出现的值)。

从 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(include = ['O'])仅对对象(字符串)调用 describe()

    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
    

除了 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

可以执行 df_test.info()来获取数据框架包含的数据类型列表。Description ()可以很好地工作,默认情况下,它提供了数值的摘要。如果您想要对象(字符串)特性的摘要,可以使用 df_test.describe(include=['O'])

或者简而言之,当数据框架具有各种数据类型的列时,您可以只使用 df_test.describe(include='all')来获取所有特性列的摘要。

pd.options.display.max_columns = DATA.shape[1]会起作用的。

这里的 DATA是一个2d 矩阵,上面的代码将垂直显示统计数据。

除了在其他答案中讨论的数据类型问题之外,您可能还有太多的列要显示。如果有太多的列,中间的列将被替换为总共三个点(...)。

其他答案指出,describeinclude='all'参数可以帮助解决数据类型问题。另一个问题问,“ 如何展开输出显示以查看更多列?”的解决方案是修改 display.max_columns的设置,这甚至可以做到 暂时的。例如,要显示来自单个 describe语句的最多40列输出:

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