【发布时间】:2015-09-02 08:27:22
【问题描述】:
函数 DataFrame.describe() 的输出取决于数据类型。
当用于数字 dtype 时,它将返回以下输出:
f.ID.describe()
count 7583.000000
mean 704013.191613
std 1192979.985253
min 10575.000000
25% 10575.000000
50% 10864.000000
75% 2084161.000000
max 6422339.000000
这在大多数情况下都有意义,除非列包含不应聚合的数字数据。例如:身份证。
在这种情况下,以下输出会更合适:
count 7583
unique 68
top 10864
freq 3390
以上是您为 object dtype 获得的输出。在 ID 的情况下,列的唯一性和大小对我来说比平均值或分布更有价值。
据我所知,对数字 dtype 执行此操作的唯一方法是首先将其转换为 object dtype,例如
f.ID.astype(str).describe()
数据类型转换可能会带来性能损失(我想对于大型数据集更明显)。这就是为什么我想知道是否有任何其他方法可以修改 describe() 行为,而不是更改数据类型(动态或创建 DataFrame 时)。
【问题讨论】:
-
您可以
groupby'ID' 列并执行聚合:f.groupby('ID', as_index=False)['ID'].agg([np.count_nonzero, np.unique, np.max]),但不确定如何获得freq计算 -
我猜最接近的是
f.groupby('ID', as_index=False)['ID'].agg([np.count_nonzero, np.unique, np.max, pd.Series.value_counts]).max() -
@EdChum 结果似乎不太正确。对于上面的示例,
count_nonzero和value_counts都返回 3390,而这应该是 7583。unique返回 6422339;这应该是 68。 -
不知道没有你的数据,但我认为使用 groupby 和 agg 是要走的路
标签: python python-3.x pandas