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

use*_*117 42 python pandas

我在数据帧上运行'describe()'并获取只有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()
Run Code Online (Sandbox Code Playgroud)

与此同时,我的丑陋工作:

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()
Run Code Online (Sandbox Code Playgroud)

ily*_*nam 62

从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
Run Code Online (Sandbox Code Playgroud)

数字列将具有用于与对象(字符串)相关的摘要统计的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
    
    Run Code Online (Sandbox Code Playgroud)

  • 所有列*仍然*不显示. (12认同)

小智 13

pd.options.display.max_columns = DATA.shape[1] 将工作。

DATA是一个二维矩阵,上面的代码将垂直显示统计信息。


Jas*_*per 8

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

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

with pd.option_context('display.max_columns', 40):
    print(df.describe(include='all'))
Run Code Online (Sandbox Code Playgroud)


RJT*_*RJT 5

DataFrame 上的“describe()”仅适用于数字类型。如果您认为您有一个数字变量并且它没有出现在“decribe()”中,请更改类型:

df[['col1', 'col2']] = df[['col1', 'col2']].astype(float)
Run Code Online (Sandbox Code Playgroud)

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

非数字系列上的“describe()”将为您提供一些统计信息(例如计数、唯一值和最常出现的值)。