Pandas 预处理函数

Pandas 预处理函数

import pandas as pd
import numpy as np
position=pd.read_csv('dataAnalyst_sql.csv')
company=pd.read_csv('company_sql.csv',encoding='utf')

(1) str #去除异常符号 [] ‘’ 等 (文本函数)

position.positionLables.str.count('分析师')    #分析师出现了几次   #str是针对值里面的字符串进行操作
position.positionLables.str[1:-1]    ##删除第一个与最后一个字符
position.positionLables.str[1:-1].str.replace('', '')    ##删除引号????不太对 ('', '')   
position.replace( 89024,'')     #对整张表具体的值进行替换

Signature: position.replace(to_replace=None, value=None, inplace=False, limit=None, regex=False, method=‘pad’)
Docstring:Replace values given in to_replace with value.

(2)对空值进行处理

fillna 、 dropna

position.loc[position.city=='深圳','city'] = np.NaN         #最好是写成= np.NaN
position.city.fillna('abc')    #填充

Signature: position.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)
Docstring:Fill NA/NaN values using the specified method

position.city=position.city.fillna('abc')    #赋值
position.dropna()          #删掉所有存在空值的行
position.dropna(axis=1)    #删掉所有存在空值的列

Signature: position.dropna(axis=0, how=‘any’, thresh=None, subset=None, inplace=False)
Docstring:Remove missing values.

(3) 删除重复元素

duplicated、 drop_duplicates

position.positionId.duplicated()    #返回布尔 bool
Signature: position.positionId.duplicated(keep='first')   
Docstring:Indicate duplicate Series values.
s=pd.Series([1,1,2,3,4])
s.duplicated()
0    False
1     True
2    False
3    False
4    False
dtype: bool
s    #找出重复值  第一次不会标注为重复值,第二次是就会标注为重复值
0    1
1    1
2    2
3    3
4    4
dtype: int64
s[s.duplicated()]    #超出重复值与位置
1    1
dtype: int64
s[~s.duplicated()]    #找出没有重复的----删除掉了重复的值,保留第一个遇到的
0    1
2    2
3    3
4    4
dtype: int64
s[~s.duplicated(keep='last')]    #保留最后一个遇到的
1    1
2    2
3    3
4    4
dtype: int64
s.drop_duplicates()    #直接返回值   duplicated是返回 bool (FALSE与true)
0    1
2    2
3    3
4    4
dtype: int64

(3) apply 可以对每一行每一列进行应用

position.companyId.astype('str')+'k'  #将int格式转换为字符串格式

0 8581k
1 23177k
2 57561k
3 7502k

position.companyId.apply(lambda x:str(x)+'k')  #  构造函数 对进行使用,输入x,输出 str(x)+'k'

0 8581k
1 23177k
2 57561k
3 7502k

def func(x):
    return str(x)+ 'k'

position.companyId.apply(func)  #这个方法更加简单方、方便

0 8581k
1 23177k
2 57561k
3 7502k

def func(x):
    if x> 130000:
        return '13000+k'
    else:
        return '0~13000'

position.companyId.apply(func)    

0 0~13000
1 0~13000
2 0~13000
3 0~13000
4 13000+k
5 0~13000

Signature: position.companyId.apply(func, convert_dtype=True, args=(), **kwds)
Docstring:Invoke function on values of Series. Can be ufunc (a NumPy function
that applies to the entire Series) or a Python function that only works
position.apply(func)    #axis=0 表示应用到每一个列
position.apply(func,axis=1)    #axis=1 表示应用到每一个行
def func(x):
    if x.companyId > 130000:
        return '13000+k'
    else:
        return '0~13000'

position.apply(func,axis=1)   

0 0~13000
1 0~13000
2 0~13000
3 0~13000
4 13000+k
5 0~13000
6 0~13000

def func(x):
    if x > 130000:
        return '13000+k'
    else:
        return '0~13000'

position.apply(lambda x:func(x,companyId),axis=1)   

(4) apply 应用到聚合函数上面

#不同城市下薪资排名前5 的
def func(x,n,asc):
   r = x.sort_values('companyId',ascending=asc)
    return r[:n]
position.groupby('city').apply(func,n=3,asc=True)    #以数据框形式输入,数据变换为5行,整个形状变化
  File "<ipython-input-71-96fe1f4df9b8>", line 3
    return r[:n]
    ^
IndentationError: unexpected indent
position.sort_values('companyId',ascending=False)[:2]
positionIdcitycompanyIdfirstTypesecondTypeeducationindustryFieldpositionAdvantagepositionNamepositionLablessalaryworkYear
47182580536成都157744市场/商务/销售类销售不限金融、电子商务环境优美,工作氛围轻松,充满激情的团队网络销售/客服/分析师助理['金融', '实习生', '在线', '经理', '销售']3K-6K不限
35772579118北京157665产品/需求/项目类数据分析本科数据服务晋升空间大 周末双休 公司前景好 优秀团队分析师助理['企业信用风险分']2k-4k不限
position.groupby('city').agg(['sum','mean'])[:6]    ##聚合
positionIdcompanyId
summeansummean
city
上海21103186272.155586e+065767313958910.254341
北京51729794432.204082e+0612907090854993.995739
南京1875182082.259256e+06529826463834.506024
厦门585014381.950048e+06195189565063.166667
天津444321392.221607e+06145104772552.350000
广州7425636102.216608e+062017023860209.665672

##aagregate 聚合,不带有整形,完整对应,形状不会有变化,apply可以对列表进行整合拆分(更为灵活,更常用)

position.groupby('city').agg(lambda x:max(x)-min(x))[:6]   #只要不涉及表格形状变化都可以应用
positionIdcompanyId
city
上海2406115157090
北京2482622157622
南京1476696151545
厦门2382465144494
天津1938475128827
广州2433163156545
Signature: position.agg(func, axis=0, *args, **kwargs)
Docstring: Aggregate using one or more operations over the specified axis.

(5) 数据透视

position.pivot_table( values= 'companyId',index=['city','education'],columns='workYear', aggfunc=[np.sum, np.mean])[:4]     #支持多重索引
 #明确生成什么养的表格  aggfunc默认是mean(功能)  
 # import numpy as np
summean
workYear1-3年10年以上1年以下3-5年5-10年不限应届毕业生1-3年10年以上1年以下3-5年5-10年不限应届毕业生
cityeducation
上海不限946395.0102820.0224569.0597364.0202081.02195421.0NaN52577.500000102820.0112284.50000049780.33333367360.33333368606.906250NaN
博士187978.0NaNNaNNaNNaN131806.0NaN93989.000000NaNNaNNaNNaN131806.000000NaN
大专3156389.0NaN160336.02819379.0533659.0966104.047063.073404.395349NaN80168.00000062652.86666776237.00000080508.66666747063.000000
本科12624586.050020.0580385.014567700.07084628.04126611.01331155.053494.00847525010.052762.27272754357.08955262145.85964962524.40909151198.269231
Signature: position.pivot_table(values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All')
Docstring: Create a spreadsheet-style pivot table as a DataFrame. The levels in
position.pivot_table( values= ['companyId','positionId'],
                     columns='workYear', 
                     index=['city','education'],
                     aggfunc={'companyId':np.sum, 'positionId':np.mean})[:5]  #切片
#实现对 positionId 对 companyId 进行求和计算        将列表改成字典
companyIdpositionId
workYear1-3年10年以上1年以下3-5年5-10年不限应届毕业生1-3年10年以上1年以下3-5年5-10年不限应届毕业生
cityeducation
上海不限946395.0102820.0224569.0597364.0202081.02195421.0NaN2.087630e+062294237.02385121.01.947482e+061.864679e+062.239489e+06NaN
博士187978.0NaNNaNNaNNaN131806.0NaN2.529990e+06NaNNaNNaNNaN1.896700e+06NaN
大专3156389.0NaN160336.02819379.0533659.0966104.047063.02.311422e+06NaN2291928.02.158873e+061.964906e+062.275759e+062.463114e+06
本科12624586.050020.0580385.014567700.07084628.04126611.01331155.02.088047e+062328147.02312697.02.138806e+062.234212e+062.207387e+062.271003e+06
硕士1130985.048294.098495.01122603.0973406.01425358.0237549.01.859358e+061793759.02574210.02.106698e+062.174119e+062.262192e+062.471457e+06
position.pivot_table( values= ['companyId','positionId'],
                     columns='workYear', 
                     index=['city','education'],
                     aggfunc={'companyId':np.sum, 'positionId':np.mean}).reset_index().to_csv('test.csv')   #输出结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值