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
tb = df.set_index('用户ID')
df.dropna().reset_index(drop=True)
2、Pandas中的排序:
df = df.sort_values(
by='销量',
ascending=False)
df
df = df.sort_values(
by=['大区', '销量'],
ascending=[True, False])
- 注意:多列排序,当存在冲突时,优先级最高的是设置在最前面的,如下虽然列1和列2都是设置为降序,但结果是列1降序,列2没变。
- 对分组统计结果排序:
df1 = df.groupby('大区', as_index=False)['销量'].sum()
df1.sort_values('销量', ascending=False)
df['销量(average)'] = df['销量'].rank(method='average', ascending=False)
df['销量(min)'] = df['销量'].rank(method='min', ascending=False)
df['销量(max)'] = df['销量'].rank(method='max', ascending=False)
df['销量(first)'] = df['销量'].rank(method='first', ascending=False)
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中的实现方法:
Q1 = df['利润'].quantile(0.25)
Q3 = df['利润'].quantile(0.75)
IQR = Q3-Q1
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)