其他分享
首页 > 其他分享> > Pandas 预处理函数

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]
positionId city companyId firstType secondType education industryField positionAdvantage positionName positionLables salary workYear
4718 2580536 成都 157744 市场/商务/销售类 销售 不限 金融、电子商务 环境优美,工作氛围轻松,充满激情的团队 网络销售/客服/分析师助理 ['金融', '实习生', '在线', '经理', '销售'] 3K-6K 不限
3577 2579118 北京 157665 产品/需求/项目类 数据分析 本科 数据服务 晋升空间大 周末双休 公司前景好 优秀团队 分析师助理 ['企业信用风险分'] 2k-4k 不限
position.groupby('city').agg(['sum','mean'])[:6]    ##聚合
positionId companyId
sum mean sum mean
city
上海 2110318627 2.155586e+06 57673139 58910.254341
北京 5172979443 2.204082e+06 129070908 54993.995739
南京 187518208 2.259256e+06 5298264 63834.506024
厦门 58501438 1.950048e+06 1951895 65063.166667
天津 44432139 2.221607e+06 1451047 72552.350000
广州 742563610 2.216608e+06 20170238 60209.665672

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

position.groupby('city').agg(lambda x:max(x)-min(x))[:6]   #只要不涉及表格形状变化都可以应用
positionId companyId
city
上海 2406115 157090
北京 2482622 157622
南京 1476696 151545
厦门 2382465 144494
天津 1938475 128827
广州 2433163 156545
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
sum mean
workYear 1-3年 10年以上 1年以下 3-5年 5-10年 不限 应届毕业生 1-3年 10年以上 1年以下 3-5年 5-10年 不限 应届毕业生
city education
上海 不限 946395.0 102820.0 224569.0 597364.0 202081.0 2195421.0 NaN 52577.500000 102820.0 112284.500000 49780.333333 67360.333333 68606.906250 NaN
博士 187978.0 NaN NaN NaN NaN 131806.0 NaN 93989.000000 NaN NaN NaN NaN 131806.000000 NaN
大专 3156389.0 NaN 160336.0 2819379.0 533659.0 966104.0 47063.0 73404.395349 NaN 80168.000000 62652.866667 76237.000000 80508.666667 47063.000000
本科 12624586.0 50020.0 580385.0 14567700.0 7084628.0 4126611.0 1331155.0 53494.008475 25010.0 52762.272727 54357.089552 62145.859649 62524.409091 51198.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 进行求和计算        将列表改成字典
companyId positionId
workYear 1-3年 10年以上 1年以下 3-5年 5-10年 不限 应届毕业生 1-3年 10年以上 1年以下 3-5年 5-10年 不限 应届毕业生
city education
上海 不限 946395.0 102820.0 224569.0 597364.0 202081.0 2195421.0 NaN 2.087630e+06 2294237.0 2385121.0 1.947482e+06 1.864679e+06 2.239489e+06 NaN
博士 187978.0 NaN NaN NaN NaN 131806.0 NaN 2.529990e+06 NaN NaN NaN NaN 1.896700e+06 NaN
大专 3156389.0 NaN 160336.0 2819379.0 533659.0 966104.0 47063.0 2.311422e+06 NaN 2291928.0 2.158873e+06 1.964906e+06 2.275759e+06 2.463114e+06
本科 12624586.0 50020.0 580385.0 14567700.0 7084628.0 4126611.0 1331155.0 2.088047e+06 2328147.0 2312697.0 2.138806e+06 2.234212e+06 2.207387e+06 2.271003e+06
硕士 1130985.0 48294.0 98495.0 1122603.0 973406.0 1425358.0 237549.0 1.859358e+06 1793759.0 2574210.0 2.106698e+06 2.174119e+06 2.262192e+06 2.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')   #输出结果

标签:city,06,函数,companyId,NaN,预处理,13000,position,Pandas
来源: https://blog.csdn.net/sinat_20263049/article/details/100545058