python数据分析--数据筛选,统计,排序

本文介绍如何使用Pandas进行数据筛选、统计和排序操作,包括筛选特定字符串、删除重复行、统计、正则表达式、分组统计、数据提取等。实例涉及求职网站数据分析岗位数据和南京市在售住宅小区数据,通过具体代码实现数据处理和分析,如筛选薪资、分组计数、计算平均值、处理异常值等。
摘要由CSDN通过智能技术生成

主要知识点:

  • Pandas筛选包含特定字符串的行/等于特定字符串的行/以特定字符串结尾的行
  • Pandas删除重复行/删除空值行,统计剩余行数
  • Pandas多条件筛选
  • Pandas正则表达式提取中文/数字
  • Pandas分组统计

一、数据集

import pandas as pd 
import numpy as np
data = {
   "grammer":['Python', 'C', 'Java', 'GO', np.NaN, 'SQL', 'PHP', 'Python'],
       "score":[1.0, 2.0, np.NaN, 4.0, 5.0, 6.0, 7.0, 10.0]}
df = pd.DataFrame(data)
df

在这里插入图片描述
1.筛选后求和
pandas筛选包含特定字符串的行,对筛选结果求和

代码:

# 提取grammer含有字符串"Python"的行,结果保留对应score值的总和,保留整数部分(多行的话score相加);
df[df['grammer'].str.contains('Python')==True]
# 结果:
 	grammer 	score
0 	Python 	1.0
7 	Python 	10.0

df[df['grammer'].str.contains('Python')==True]['score'].sum().astype('int')
# 结果
11

pandas筛选值在某个范围的行,对筛选结果进行求和

代码:

# 提取score列值大于3小于7的行,结果输出所有行score的总和,保留整数部分;
df[(df['score']>3)&(df['score']<7)]['score'].sum().astype('int')

# 结果:
15

二、数据源:某求职网站数据分析岗位数据

数据信息:

import pandas as pd
df = pd.read_csv('/home/mw/input/data5935/data_analysis_job.csv', encoding='GBK')
df.head()

在这里插入图片描述

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 12438 entries, 0 to 12437
Data columns (total 11 columns):
城市      12438 non-null object
招聘岗位    12336 non-null object
薪资      12256 non-null object
工作经验    12152 non-null object
学历      12140 non-null object
所招人数    12328 non-null object
专业要求    1675 non-null object
职位信息    12336 non-null object
公司类型    12329 non-null object
公司规模    11712 non-null object
所属行业    12336 non-null object
dtypes: object(11)
memory usage: 1.0+ MB

题目:
1.pandas筛选字符串值等于特定字符串的行,对筛选结果进行计数

#提取薪资为'1-2万/月'的岗位,结果输出数据行数;
df[df['薪资'].notnull()]['薪资'].str.contains('1-2万/月').sum() 

# 结果:
399

2.Pandas筛选包含特定字符串的行,对筛选结果进行计数

# 提取招聘岗位中有关数据分析的岗位,结果输出数据行数;
len(df[df['招聘岗位'].str.contains('数据分析')== True])

3.Pandas提取以特定字符串结尾的行

#先剔除薪资中的缺失值,然后提取薪资中按年给工资的岗位,结果输出数据行数;
df.dropna(subset=['薪资'],inplace=True)
len(df[df['薪资'].str.endswith('年') == True])

4.Pandas删除重复行,统计剩余行数

# 删除薪资和学历两列重复的岗位,保留一行即可,结果输出剩余数据行数;
#(比如很多岗位要求本科和一年经验,只保留一条数据,其余相同要求的岗位全部删除)
df.drop_duplicates(subset=['薪资','学历'],keep='first',inplace = True)
print('剩余数据行数为:',len(df))
# 结果:
剩余数据行数为:843

相关知识点:Pandas删除特定行列的方法

5.pandas删除空值行,统计剩余行数

# 查看招聘岗位列存在缺失值的数据,并删除这些岗位,结果输出剩余行数;
df.dropna(subset=['招聘岗位'],inplace=True)
print('剩余数据行数为:',len(df))

相关知识点:Python处理缺失值的几种方法

6.Pandas之匿名函数,数据提取,数据分割

相关知识点:
python提取字符串的中英文–re模块的三个函数
python对数据进行分组统计

本题要求:
先提取薪资中按万/月给工资的岗位,
然后计算剩余岗位薪资区间中最低薪资与最高薪资的平均值大于等于3万的岗位,
结果输出数据行数;

  • 先提取薪资中按万/月给工资的岗位,
# 1.数据提取,新增一些辅助计算列
import re
houzhui=[]
danwei=[]
maxs=[]
mins=[]
period=[]
for i in df['薪资']:
    res1=''.join(re.findall(r'[\u4e00-\u9fa5]+/[\u4e00-\u9fa5]+',i)) # 
    res2=''.join(re.findall(r'\d+\.?\d*-\d+\.?\d*',i))
    danwei.append(res1.split('/')[0])
    period.append(res1.split('/')[1])
    houzhui.append(res1)

    if len(res2.split('-'))== 2:
        mins.append(res2.split('-')[0])
        maxs.append(res2.split('-')[1])
    else:
        mins.append(res2.split('-')[0])
        maxs.append(res2.split('-')[0])       
# 创建一个新的数据框用于本题的计算
import pandas as pd
df0=pd.DataFrame({
   '招聘岗位':df['招聘岗位'],'薪资':df['薪资'],'薪酬后缀':houzhui,'单位':danwei,'计薪周期':period,'最小值':mins,'最大值':maxs})
df0

在这里插入图片描述

# 提取薪资中按万/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值