Pandas 'describe'没有返回所有列的摘要

nxowjjhe  于 2023-09-29  发布在  其他
关注(0)|答案(7)|浏览(167)

我在一个dataframe上运行'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()

我的丑陋的工作在此期间:

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()
fcy6dtqo

fcy6dtqo1#

从pandas v15.0开始,当dataframe具有 * 混合列类型 * 时,使用参数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])
1.使用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
mwyxok5s

mwyxok5s2#

pd.options.display.max_columns = DATA.shape[1]可以工作。
这里DATA是一个二维矩阵,上面的代码将垂直显示统计数据。

tvz2xvvm

tvz2xvvm3#

除了在其他答案中讨论的数据类型问题外,您可能还需要显示太多的列。如果列太多,中间的列将被替换为总共三个点(...)。
其他答案指出,describeinclude='all'参数可以帮助解决数据类型问题。另一个问题是:“如何扩展输出显示以查看更多列?“解决方案是修改display.max_columns设置,这甚至可以临时完成。例如,要显示单个describe语句的最多40列输出:

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

mxg2im7a4#

DataFrame上的“describe()”仅适用于数值类型。如果你认为你有一个数字变量,但它没有出现在'decribe()'中,用以下命令更改类型:

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

您还可以创建新列来处理混合类型列的数字部分,或者使用字典和map()函数将字符串转换为数字。
对非数字序列使用“describe()”将给予一些统计信息(如计数、唯一和最频繁出现的值)。

hfwmuf9z

hfwmuf9z5#

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

zd287kbt6#

您可以执行df_test.info()来获取数据框包含的数据类型列表。如果您的数据框仅包含数值列,那么df_test.describe()将完全正常工作。默认情况下,它提供数值的摘要。如果你想要对象(字符串)特性的摘要,你可以使用df_test.describe(include=['O'])
或者简而言之,当数据框包含各种数据类型的列时,您可以使用df_test.describe(include='all')来获取所有特征列的摘要。

jm81lzqq

jm81lzqq7#

df = pd.DataFrame(df)
df = df.astype(float)
df.describe()

很可能您只是从pd.read_csv阅读数据,而不是将其保存为DataFrame。如果列中有任何标题,请执行此操作

df = df[1:]

这对我很有效

相关问题