我正在跑步'描述()'在数据框上并获取只有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()
答案 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,反之亦然。
仅汇总数字或对象列
describe()
describe(include = [np.number])
使用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