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

时间:2014-07-02 06:15:43

标签: python pandas

我正在跑步'描述()'在数据框上并获取只有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()

7 个答案:

答案 0 :(得分:51)

从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()
  2. 在数字列上致电describe(include = [np.number])
  3. 使用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
    

答案 1 :(得分:4)

'描述()'在DataFrame上只适用于数字类型。如果您认为自己有一个数字变量并且没有显示在' decribe()'中,请更改类型:

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

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

'描述()'在非数字系列上会给你一些统计数据(如计数,唯一和最常出现的值)。

答案 2 :(得分:3)

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

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

答案 3 :(得分: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

答案 4 :(得分:2)

您可以执行df_test.info()来获取数据框所包含的数据类型列表。如果您的数据框只包含数字列而不是df_test.describe()将完美正常。默认情况下,它提供了数值。如果您想要对象(字符串)功能的摘要,可以使用df_test.describe(include=['O'])

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

答案 5 :(得分:0)

.describe()方法仅适用于具有数字数据类型的列。您可以通过以下方式检查列的数据类型:

df.dtypes()

要获取使用的所有列的描述摘要,

df.describe(include='all')

这将为您提供所有列的描述。

答案 6 :(得分:0)

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

其他答案指出include='all'的{​​{1}}参数可以解决数据类型问题。另一个问题是“ How do I expand the output display to see more columns?”,解决方案是修改describe设置,甚至可以temporarily完成。例如,要显示单个display.max_columns语句的多达40列输出:

describe