数据分析09——Pandas中的索引设置/排序/数据统计(异常值处理)

1、Pandas中的索引设置:

  • Series重置索引
    • 重置索引:s2 = s1.reindex([1, 2, 3, 4, 5]) # 这种情况即使列表中索引给多了也没事,会自动填充空值。
    • 重置索引:s3 = s1.reindex([1, 2, 3, 4, 5], fill_value=0) # 这种情况列表中索引给多了,将填充值设为0。
    • 重置索引:s4 = s1.reindex([1, 2, 3, 4, 5], method=‘ffill’) # 向前填充,method='bfill’是向后填充。
  • DataFrame重置索引
# 充值行列索引
tb = df.reindex(
    index=['A001', 'A002', 'A003', 'A004', 'A005'],
    columns=['语文', '物理', '数学', '英语'])
tb

# reindex:对索引重新赋值
# reset_index:重置索引从0开始
# set_index:设置某列为索引

tb = df.set_index('用户ID')	# 设置'用户ID'列为索引
df.dropna().reset_index(drop=True)	# dropna()删除空值后,其余索引乱掉了,重置索引从0开始,drop=True表示删除之前乱掉的的索引drop=False,表示保留之前乱掉的索引。


2、Pandas中的排序:

  • 按列排序
# ascending=True,默认升序
# ascending=False,降序
# ignore_index=True,忽略索引,排序索引依然从0开始
df = df.sort_values(
    by='销量',
    ascending=False)
df

# 多列排序
df = df.sort_values(
    by=['大区', '销量'],
    ascending=[True, False])
  • 注意:多列排序,当存在冲突时,优先级最高的是设置在最前面的,如下虽然列1和列2都是设置为降序,但结果是列1降序,列2没变。
    在这里插入图片描述
  • 对分组统计结果排序:
# 以大区分组对销量求和,再对销量做排序
# df.groupby('大区')['销量'].sum().reset_index()
df1 = df.groupby('大区', as_index=False)['销量'].sum()	# 在分组的前提下,对其中的销量求和
df1.sort_values('销量', ascending=False)
# df1.sort_index(ascending=False)
  • rank方法进行排序:
	# {'average', 'min', 'max', 'first', 'dense'}
	df['销量(average)'] = df['销量'].rank(method='average', ascending=False)
	# 类似于SQL的rank,数值一样时,取first排名的最小值,名次会有空缺
	df['销量(min)'] = df['销量'].rank(method='min', ascending=False)
	# 数值一样时,取first排名的最大值,名次会有空缺
	df['销量(max)'] = df['销量'].rank(method='max', ascending=False)
	# 类似于SQL的row_number,即使数值一样,也会生成唯一名次(先到先得原则),名次是连续的
	df['销量(first)'] = df['销量'].rank(method='first', ascending=False)
	# 类似于SQL的dense_rank,如果数值一样,会出现并列的名次,名次是连续的
	df['销量(dense)'] = df['销量'].rank(method='dense', ascending=False)
- 说明:

在这里插入图片描述

  • 注意:在代码编辑中如何修改数据,源文件
  • 数据是不会发生改变的,要将修改之后的源数据进行保存,然后再导出到源文件,源数据才会发生改变。
  • 导出为Excel:df.to_excel(‘./data/demo_08_rank.xlsx’)

3、数据统计:

  • 前言:以下全都以df数据为例,
    • axis=1:表示计算数据来自行
    • axis=0:表示计算数据来自列
  • 求和:df[‘总成绩’] = df.sum(axis=1)
  • 求均值:df.loc[‘均值’] = df.mean(axis=0)
  • 求最大值:df.max()
  • 求最小值:df.min()
  • 求中位数:df.median()
  • 求众数:df.mode()
  • 方差:var()
  • 标准差:std()
  • 变异系数:df[‘变异系数’] = df[‘标准差’] / df[‘均值’]

4、pandas中分位数的求法和异常值的筛选与处理:

  • 概念:
    • 分位数是用于描述数据分布情况的统计量,是将所有数据值按大小顺序排列后分割成若干等份的特定位置上的数值。根据数据分割的不同方法和所得位置的不同,通常有四分位数、百分位数等多种类型的分位数。
    • 其中,四分位数把数据集分割成四个等份,分别为第一部分包含最小的25%的数据,第二部分包含最小的50%的数据(也就是中位数),第三部分包含最小的75%的数据,第四部分包含全部数据。即:将所有的数值由小至大排列,计算出第25%、第50%和第75%位置上的数值,这些数值分别称为第一、二和三个四分位数(Q1、Q2、Q3)。
    • 分位数能够通过数据的分布情况来反映数据集内部数据的集中性和波动程度,并且在数据可视化和异常值检测等方面广泛应用。同时,在描述连续变量数据的中位数时,也经常用到了百分位数,它表示数据集中某个特定百分比处的数字。例如,数据集的“75%分位数”表示有75%的数小于或等于该值,而另外25%大于该值。
  • 分位数计算公式
    在这里插入图片描述
  • 举例:
    在这里插入图片描述
  • 注意:需要注意的是,在计算分位数时,首先需要将待处理的数据从小到大排列并进行升序排序,以便于准确计算指定位置处的数值。此外,不同的统计软件和工具在计算分位数时使用的实际计算公式可能会略有不同,具体还需根据实际情况进行选择。
  • pandas中的实现方法:
# 计算25%的分位数,Q1,下四分位数
Q1 = df['利润'].quantile(0.25)

# 计算75%的分位数,Q3,上四分位数
Q3 = df['利润'].quantile(0.75)

# 计算四分位距,Q3-Q1
IQR = Q3-Q1

# 上限值:Q3+1.5*IQR,不能大于最大值
# 下限值:Q1-1.5*IQR,不能小于最小值
upper = min(Q3+1.5*IQR, df['利润'].max())
lower = max(Q1-1.5*IQR, df['利润'].min())

# 异常值筛选
cond1 = df['利润'] > upper
cond2 = df['利润'] < lower
df[cond1 | cond2]

# 异常值处理
# 如高于上限值,则使用上限值替换
# 如低于下限值,则使用下限值替换
df['利润'] = df['利润'].clip(lower=lower, upper=upper)


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值