主要知识点:
- 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
# 提取薪资中按万/