前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据清洗之 高阶函数处理

数据清洗之 高阶函数处理

原创
作者头像
ruochen
修改2021-05-13 14:33:22
4370
修改2021-05-13 14:33:22
举报
文章被收录于专栏:若尘的技术专栏

高阶函数处理

  • 在dataframe中使用apply方法,调用自定义函数对数据进行处理
  • 函数apply,注意axis
  • 可以使用astype函数对数据进行转换
  • 可以使用map函数进行数据转换
代码语言:txt
复制
import pandas as pd
import numpy as np
import os
代码语言:txt
复制
os.getcwd()
代码语言:txt
复制
'D:\\Jupyter\\notebook\\Python数据清洗实战\\数据清洗之数据转换'
代码语言:txt
复制
os.chdir('D:\\Jupyter\\notebook\\Python数据清洗实战\\数据')
代码语言:txt
复制
df = pd.read_csv('sam_tianchi_mum_baby.csv', dtype=str, encoding='utf-8')
代码语言:txt
复制
df.head(5)

<div>

<style scoped>

代码语言:txt
复制
.dataframe tbody tr th:only-of-type {
代码语言:txt
复制
    vertical-align: middle;
代码语言:txt
复制
}
代码语言:txt
复制
.dataframe tbody tr th {
代码语言:txt
复制
    vertical-align: top;
代码语言:txt
复制
}
代码语言:txt
复制
.dataframe thead th {
代码语言:txt
复制
    text-align: right;
代码语言:txt
复制
}

</style>

<table border="1" class="dataframe">

<thead>

代码语言:txt
复制
<tr style="text-align: right;">
代码语言:txt
复制
  <th></th>
代码语言:txt
复制
  <th>user_id</th>
代码语言:txt
复制
  <th>birthday</th>
代码语言:txt
复制
  <th>gender</th>
代码语言:txt
复制
</tr>

</thead>

<tbody>

代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>0</th>
代码语言:txt
复制
  <td>2757</td>
代码语言:txt
复制
  <td>20130311</td>
代码语言:txt
复制
  <td>1</td>
代码语言:txt
复制
</tr>
代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>1</th>
代码语言:txt
复制
  <td>415971</td>
代码语言:txt
复制
  <td>20121111</td>
代码语言:txt
复制
  <td>0</td>
代码语言:txt
复制
</tr>
代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>2</th>
代码语言:txt
复制
  <td>1372572</td>
代码语言:txt
复制
  <td>20120130</td>
代码语言:txt
复制
  <td>1</td>
代码语言:txt
复制
</tr>
代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>3</th>
代码语言:txt
复制
  <td>10339332</td>
代码语言:txt
复制
  <td>20110910</td>
代码语言:txt
复制
  <td>0</td>
代码语言:txt
复制
</tr>
代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>4</th>
代码语言:txt
复制
  <td>10642245</td>
代码语言:txt
复制
  <td>20130213</td>
代码语言:txt
复制
  <td>0</td>
代码语言:txt
复制
</tr>

</tbody>

</table>

</div>

代码语言:txt
复制
def f(x):
    if '0' in str(x):
        return '女'
    elif '1' in str(x):
        return '男'
    else:
        return '未知'
代码语言:txt
复制
# apply函数可做很多其他处理
df['性别'] = df['gender'].apply(f)
代码语言:txt
复制
df.head(5)

<div>

<style scoped>

代码语言:txt
复制
.dataframe tbody tr th:only-of-type {
代码语言:txt
复制
    vertical-align: middle;
代码语言:txt
复制
}
代码语言:txt
复制
.dataframe tbody tr th {
代码语言:txt
复制
    vertical-align: top;
代码语言:txt
复制
}
代码语言:txt
复制
.dataframe thead th {
代码语言:txt
复制
    text-align: right;
代码语言:txt
复制
}

</style>

<table border="1" class="dataframe">

<thead>

代码语言:txt
复制
<tr style="text-align: right;">
代码语言:txt
复制
  <th></th>
代码语言:txt
复制
  <th>user_id</th>
代码语言:txt
复制
  <th>birthday</th>
代码语言:txt
复制
  <th>gender</th>
代码语言:txt
复制
  <th>性别</th>
代码语言:txt
复制
</tr>

</thead>

<tbody>

代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>0</th>
代码语言:txt
复制
  <td>2757</td>
代码语言:txt
复制
  <td>20130311</td>
代码语言:txt
复制
  <td>1</td>
代码语言:txt
复制
  <td>男</td>
代码语言:txt
复制
</tr>
代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>1</th>
代码语言:txt
复制
  <td>415971</td>
代码语言:txt
复制
  <td>20121111</td>
代码语言:txt
复制
  <td>0</td>
代码语言:txt
复制
  <td>女</td>
代码语言:txt
复制
</tr>
代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>2</th>
代码语言:txt
复制
  <td>1372572</td>
代码语言:txt
复制
  <td>20120130</td>
代码语言:txt
复制
  <td>1</td>
代码语言:txt
复制
  <td>男</td>
代码语言:txt
复制
</tr>
代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>3</th>
代码语言:txt
复制
  <td>10339332</td>
代码语言:txt
复制
  <td>20110910</td>
代码语言:txt
复制
  <td>0</td>
代码语言:txt
复制
  <td>女</td>
代码语言:txt
复制
</tr>
代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>4</th>
代码语言:txt
复制
  <td>10642245</td>
代码语言:txt
复制
  <td>20130213</td>
代码语言:txt
复制
  <td>0</td>
代码语言:txt
复制
  <td>女</td>
代码语言:txt
复制
</tr>

</tbody>

</table>

</div>

代码语言:txt
复制
# 查看性别为未知数据
df[df['gender'] == '2'].head(5)

<div>

<style scoped>

代码语言:txt
复制
.dataframe tbody tr th:only-of-type {
代码语言:txt
复制
    vertical-align: middle;
代码语言:txt
复制
}
代码语言:txt
复制
.dataframe tbody tr th {
代码语言:txt
复制
    vertical-align: top;
代码语言:txt
复制
}
代码语言:txt
复制
.dataframe thead th {
代码语言:txt
复制
    text-align: right;
代码语言:txt
复制
}

</style>

<table border="1" class="dataframe">

<thead>

代码语言:txt
复制
<tr style="text-align: right;">
代码语言:txt
复制
  <th></th>
代码语言:txt
复制
  <th>user_id</th>
代码语言:txt
复制
  <th>birthday</th>
代码语言:txt
复制
  <th>gender</th>
代码语言:txt
复制
  <th>性别</th>
代码语言:txt
复制
</tr>

</thead>

<tbody>

代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>46</th>
代码语言:txt
复制
  <td>49167150</td>
代码语言:txt
复制
  <td>20130818</td>
代码语言:txt
复制
  <td>2</td>
代码语言:txt
复制
  <td>未知</td>
代码语言:txt
复制
</tr>
代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>47</th>
代码语言:txt
复制
  <td>49983255</td>
代码语言:txt
复制
  <td>20140206</td>
代码语言:txt
复制
  <td>2</td>
代码语言:txt
复制
  <td>未知</td>
代码语言:txt
复制
</tr>
代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>51</th>
代码语言:txt
复制
  <td>52529655</td>
代码语言:txt
复制
  <td>20130611</td>
代码语言:txt
复制
  <td>2</td>
代码语言:txt
复制
  <td>未知</td>
代码语言:txt
复制
</tr>
代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>58</th>
代码语言:txt
复制
  <td>57711375</td>
代码语言:txt
复制
  <td>20130420</td>
代码语言:txt
复制
  <td>2</td>
代码语言:txt
复制
  <td>未知</td>
代码语言:txt
复制
</tr>
代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>106</th>
代码语言:txt
复制
  <td>99665637</td>
代码语言:txt
复制
  <td>20130926</td>
代码语言:txt
复制
  <td>2</td>
代码语言:txt
复制
  <td>未知</td>
代码语言:txt
复制
</tr>

</tbody>

</table>

</div>

代码语言:txt
复制
del df['性别']
代码语言:txt
复制
# map函数主要用于映射
df['性别'] = df['gender'].map({'0': '女性', '1':'男性', '2': '未知'})
代码语言:txt
复制
df.head(5)

<div>

<style scoped>

代码语言:txt
复制
.dataframe tbody tr th:only-of-type {
代码语言:txt
复制
    vertical-align: middle;
代码语言:txt
复制
}
代码语言:txt
复制
.dataframe tbody tr th {
代码语言:txt
复制
    vertical-align: top;
代码语言:txt
复制
}
代码语言:txt
复制
.dataframe thead th {
代码语言:txt
复制
    text-align: right;
代码语言:txt
复制
}

</style>

<table border="1" class="dataframe">

<thead>

代码语言:txt
复制
<tr style="text-align: right;">
代码语言:txt
复制
  <th></th>
代码语言:txt
复制
  <th>user_id</th>
代码语言:txt
复制
  <th>birthday</th>
代码语言:txt
复制
  <th>gender</th>
代码语言:txt
复制
  <th>性别</th>
代码语言:txt
复制
</tr>

</thead>

<tbody>

代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>0</th>
代码语言:txt
复制
  <td>2757</td>
代码语言:txt
复制
  <td>20130311</td>
代码语言:txt
复制
  <td>1</td>
代码语言:txt
复制
  <td>男性</td>
代码语言:txt
复制
</tr>
代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>1</th>
代码语言:txt
复制
  <td>415971</td>
代码语言:txt
复制
  <td>20121111</td>
代码语言:txt
复制
  <td>0</td>
代码语言:txt
复制
  <td>女性</td>
代码语言:txt
复制
</tr>
代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>2</th>
代码语言:txt
复制
  <td>1372572</td>
代码语言:txt
复制
  <td>20120130</td>
代码语言:txt
复制
  <td>1</td>
代码语言:txt
复制
  <td>男性</td>
代码语言:txt
复制
</tr>
代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>3</th>
代码语言:txt
复制
  <td>10339332</td>
代码语言:txt
复制
  <td>20110910</td>
代码语言:txt
复制
  <td>0</td>
代码语言:txt
复制
  <td>女性</td>
代码语言:txt
复制
</tr>
代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>4</th>
代码语言:txt
复制
  <td>10642245</td>
代码语言:txt
复制
  <td>20130213</td>
代码语言:txt
复制
  <td>0</td>
代码语言:txt
复制
  <td>女性</td>
代码语言:txt
复制
</tr>

</tbody>

</table>

</div>

代码语言:txt
复制
del df['性别']
代码语言:txt
复制
# map函数也可传入自己定义的函数
df['性别'] = df['gender'].map(f)
代码语言:txt
复制
df.head(5)

<div>

<style scoped>

代码语言:txt
复制
.dataframe tbody tr th:only-of-type {
代码语言:txt
复制
    vertical-align: middle;
代码语言:txt
复制
}
代码语言:txt
复制
.dataframe tbody tr th {
代码语言:txt
复制
    vertical-align: top;
代码语言:txt
复制
}
代码语言:txt
复制
.dataframe thead th {
代码语言:txt
复制
    text-align: right;
代码语言:txt
复制
}

</style>

<table border="1" class="dataframe">

<thead>

代码语言:txt
复制
<tr style="text-align: right;">
代码语言:txt
复制
  <th></th>
代码语言:txt
复制
  <th>user_id</th>
代码语言:txt
复制
  <th>birthday</th>
代码语言:txt
复制
  <th>gender</th>
代码语言:txt
复制
  <th>性别</th>
代码语言:txt
复制
</tr>

</thead>

<tbody>

代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>0</th>
代码语言:txt
复制
  <td>2757</td>
代码语言:txt
复制
  <td>20130311</td>
代码语言:txt
复制
  <td>1</td>
代码语言:txt
复制
  <td>男</td>
代码语言:txt
复制
</tr>
代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>1</th>
代码语言:txt
复制
  <td>415971</td>
代码语言:txt
复制
  <td>20121111</td>
代码语言:txt
复制
  <td>0</td>
代码语言:txt
复制
  <td>女</td>
代码语言:txt
复制
</tr>
代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>2</th>
代码语言:txt
复制
  <td>1372572</td>
代码语言:txt
复制
  <td>20120130</td>
代码语言:txt
复制
  <td>1</td>
代码语言:txt
复制
  <td>男</td>
代码语言:txt
复制
</tr>
代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>3</th>
代码语言:txt
复制
  <td>10339332</td>
代码语言:txt
复制
  <td>20110910</td>
代码语言:txt
复制
  <td>0</td>
代码语言:txt
复制
  <td>女</td>
代码语言:txt
复制
</tr>
代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>4</th>
代码语言:txt
复制
  <td>10642245</td>
代码语言:txt
复制
  <td>20130213</td>
代码语言:txt
复制
  <td>0</td>
代码语言:txt
复制
  <td>女</td>
代码语言:txt
复制
</tr>

</tbody>

</table>

</div>

代码语言:txt
复制
# 脱敏处理
# 可使用lambda函数
df['user_id'].apply(lambda x: str(x).replace(x[1:3], '**')).head(5)
代码语言:txt
复制
0        2**7
代码语言:txt
复制
1      4**971
代码语言:txt
复制
2     1**2572
代码语言:txt
复制
3    1**39332
代码语言:txt
复制
4    1**42245
代码语言:txt
复制
Name: user_id, dtype: object
代码语言:txt
复制
df['birthday'].apply(lambda x: x[0:4]).head(5)
代码语言:txt
复制
0    2013
代码语言:txt
复制
1    2012
代码语言:txt
复制
2    2012
代码语言:txt
复制
3    2011
代码语言:txt
复制
4    2013
代码语言:txt
复制
Name: birthday, dtype: object

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 高阶函数处理
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档