【pandas小记】pandas中易混淆的描述性统计

以下几种pandas描述性感觉容易混淆,记录下
1,pandas.DataFrame.count

DataFrame.count(self, axis=0, level=None, numeric_only=False)
#统计为每列或每行非NA数

# 参数
"""
axis : {0 or ‘index’, 1 or ‘columns’}, 默认为 0
level : int 或 str, 对于分层索引指定层级
numeric_only : boolean, 默认为 False 如果为True 仅包含float,int或boolean数据
"""

#demo
df = pd.DataFrame({'k1': list('aabba'),
                   'k2': ['one', 'two', 'one', 'two', 'one'],
                   'value1': [np.nan, 2, np.nan, 3, 4],
                   'value2': [10, 20, np.nan, np.nan, 40]})
"""
  k1   k2  value1  value2
0  a  one     NaN    10.0
1  a  two     2.0    20.0
2  b  one     NaN     NaN
3  b  two     3.0     NaN
4  a  one     4.0    40.0
"""
print(df.count(axis=0))
""" 统计每列非NA数
k1        5
k2        5
value1    3
value2    3
dtype: int64
"""
print(df.set_index(['k1', 'k2']).count(level=1))
""" 分层索引 按K2统计非NA数
     value1  value2
k2                 
one       1       2
two       2       1
"""
print(df.groupby(['k1', 'k2']).count())
"""groupby也有同样的方法,统计组内非NA数,无任何参数
        value1  value2
k1 k2                 
a  one       1       2
   two       1       1
b  one       0       0
   two       1       0
"""
print(df['k1'].count())
""" Series 也有同样的方法
5
"""

2,pandas.Series.value_counts

Series.value_counts(self, normalize=False, sort=True, ascending=False, bins=None, dropna=True)
"""
 对Series里面的每个值进行计数并且排序,
 结果对象将按降序排列,默认情况下不包括NA值。
 """
 #参数
 """
 normalize:bool, 默认False 如果为True,返回频率占比
 sort:bool, default True,按照频率排序
 ascending:bool, default False 降序排序
 bins:不是计数,而是将它们分组到半开的容器中,与pd.cut类似,只针对数值
 dropna:bool, default True,忽略NAN
 """
 
 #demo
 
df = pd.DataFrame({'k1': list('aabba'),
                   'k2': ['one', 'two', 'one', 'two', 'one'],
                   'value1': [11, 20, 21, 21, 41],
                   'value2': [11, 20, 21, 31, 40]})

print(df['k2'].value_counts(ascending=True,normalize=True))
""" 使用频率占比
two    0.4
one    0.6
Name: k2, dtype: float64
"""

print(df['value2'].value_counts(bins=2))
""" 分层两个容器
(10.97, 25.5]    3
(25.5, 40.0]     2
Name: value2, dtype: int64
"""
print(df[['value1', 'value2']].apply(pd.value_counts))
"""DataFrame通过apply调用value_counts
    value1  value2
11     1.0     1.0
20     1.0     1.0
21     2.0     1.0
31     NaN     1.0
40     NaN     1.0
41     1.0     NaN
"""

3,pandas.DataFrame.size

DataFrame.size
# 返回表示此对象中元素数

#demo
df = pd.DataFrame({'k1': list('aabba'),
                   'k2': ['one', 'two', 'one', 'two', 'one'],
                   'value1': [np.nan, 2, np.nan, 3, 4],
                   'value2': [10, 20, np.nan, np.nan, 40]})
print(df)
print(df.size)  # 20
"""
size 与 count()不同
1,size是property,count是method
2,size统计整个df或者series的元素数,而count()可以按行或列统计
3,size包含NAN,而count()可以排除NAN
"""
# 在groupby中size计数时包含NaN值,而count不包含NaN值
print(df.groupby(['k1', 'k2'])['value1'].size())
"""
k1  k2 
a   one    2
    two    1
b   one    1
    two    1
Name: value1, dtype: int64
"""
print(df.groupby(['k1', 'k2'])['value1'].count())
"""k1  k2 
a   one    1
    two    1
b   one    0
    two    1
Name: value1, dtype: int64
"""

4,pandas.Series.unique

Series.unique(self)
# 返回Series每个特征的唯一值,也返回去重后剩余的值

# demo
df = pd.DataFrame({'k1': list('aabba'),
                   'k2': ['one', 'two', 'one', 'two', 'one'],
                   'value1': [11, 20, 21, 21, 41],
                   'value2': [11, 20, 21, 31, 40]})
print(df)
print(df['value1'].unique())  # [11 20 21 41]  

5,pandas.DataFrame.nunique

DataFrame.nunique(self, axis=0, dropna=True)
# 返回沿指定轴上唯一值的个数,忽略NAN,也返回重后剩余值的个数

#参数
"""
axis:轴向 默认0轴
dropna:bool, default True,忽略NAN
"""

# demo

df = pd.DataFrame({'k1': list('aabba'),
                   'k2': ['one', 'two', 'one', 'two', 'one'],
                   'value1': [11, 20, 21, np.nan, 41],
                   'value2': [11, np.nan, 21, np.nan, 40]})

print(df.nunique(axis=0))
"""
k1        2  ['a','b'] 两个值
k2        2  ['one','two'] 两个值
value1    4  [11.20,21,41]
value2    3  [11,21,40]
dtype: int64
"""
print(df['k1'].nunique())  # Series 也有nunique(),不过无axis参数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Python的数据分析库Pandas描述性统计是一种用于理解数据集基本特征的方法。它主要包括以下几种核心概念: 1. **基本统计量**:Pandas提供了一系列函数,如`count()`计算非空值的数量,`mean()`计算平均值,`median()`求位数,`min()`和`max()`找出最小值和最大值,`std()`和`var()`计算标准差和方差,这些帮助我们了解数值型数据的分布情况。 2. **频率分部(Histograms)**:`value_counts()`用于查看类别变量的频数,而`hist()`或`plot.hist()`可用于创建直方图,展示数值变量的分布情况。 3. **描述性统计汇总**:`describe()`函数提供了大量的统计信息,包括计数、平均值、标准差、最小值、四分位数等,对于数值型数据非常有用。 4. **心趋势指标**:如均值(平均数)、位数(将数据分为两半,间的那个值)和众数(出现最频繁的值),它们用来描述数据集点的典型位置。 5. **离散程度指标**:如极差(最大值减最小值)、IQR(四分位距,即上四分位数与下四分位数之差)和标准差(衡量数据分散的程度)。 6. **数据分布形状**:通过计算偏度和峰度(分别衡量数据分布的对称性和尖锐度),可以判断数据是否对称、偏斜或呈现某种特定的形态。 7. **缺失值处理**:Pandas提供了`isnull()`和`notnull()`来检查缺失值,以及`fillna()`和`dropna()`来处理这些缺失值。 当你使用Pandas对数据进行描述性统计时,通常会结合可视化工具(如matplotlib或seaborn)来直观地呈现数据的特性,以便于更好地理解和分析数据集。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值