数据取值范围约束

Python 数据清洗

Adel Nehme

VP of AI Curriculum, DataCamp

动机

movies.head()
     movie_name     avg_rating
0    The Godfather           5
1    Frozen 2                3
2    Shrek                   4
...    
Python 数据清洗

动机

import matplotlib.pyplot as plt
plt.hist(movies['avg_rating'])
plt.title('电影平均评分(1-5)')

heart_rate_normal

Python 数据清洗

动机

未来的注册记录可能存在吗?

# 导入日期时间
import datetime as dt
today_date = dt.date.today()
user_signups[user_signups['subscription_date'] > dt.date.today()]
   subscription_date  user_name         ...             Country
0         01/05/2021      Marah         ...             Nauru
1         09/08/2020     Joshua         ...             Austria
2         04/01/2020      Heidi         ...             Guinea
3         11/10/2020       Rina         ...             Turkmenistan
4         11/07/2020  Christine         ...             Marshall Islands
5         07/07/2020     Ayanna         ...             Gabon

Python 数据清洗

如何处理超出范围的数据?

  • 删除数据
  • 设定自定义最小/最大值
  • 视为缺失并插补
  • 基于业务假设设定自定义值
Python 数据清洗

电影示例

import pandas as pd
# 输出评分 > 5 的电影
movies[movies['avg_rating'] > 5]
         movie_name  avg_rating
23  A Beautiful Mind           6
65   La Vita e Bella           6
77            Amelie           6
# 通过筛选删除
movies = movies[movies['avg_rating'] <= 5]

# 使用 .drop() 删除 movies.drop(movies[movies['avg_rating'] > 5].index, inplace = True)
# 断言结果 assert movies['avg_rating'].max() <= 5
Python 数据清洗

电影示例

# 将 avg_rating > 5 设为 5
movies.loc[movies['avg_rating'] > 5, 'avg_rating'] = 5
# 断言
assert movies['avg_rating'].max() <= 5

请记住,无输出表示通过

Python 数据清洗

日期范围示例

import datetime as dt
import pandas as pd
# 输出数据类型
user_signups.dtypes
subscription_date    object
user_name            object
Country              object
dtype: object
# 转为日期
user_signups['subscription_date'] = pd.to_datetime(user_signups['subscription_date']).dt.date
Python 数据清洗

日期范围示例

today_date = dt.date.today()

删除数据

# 通过筛选删除
user_signups = user_signups[user_signups['subscription_date'] < today_date]

# 使用 .drop() 删除 user_signups.drop(user_signups[user_signups['subscription_date'] > today_date].index, inplace = True)

硬编码日期上限

# 通过筛选处理
user_signups.loc[user_signups['subscription_date'] > today_date, 'subscription_date'] = today_date
# 断言为真
assert user_signups.subscription_date.max().date() <= today_date
Python 数据清洗

Ayo berlatih!

Python 数据清洗

Preparing Video For Download...