@R星校长
第2
关:清洗数据
任务描述
本关任务:读取数据,输出删除NA
值以及重复值之后的结果,并重置索引列。
相关知识
数据清洗的目的有两个,第一是通过清洗让数据可用。第二是让数据变的更适合进行后续的分析工作。换句话说就是有”脏”数据要洗,干净的数据也要洗。
缺失值处理
检查缺失值
Pandas
提供了isnull()
和notnull()
两个函数来检测数据中的NaN
值。Series
和DataFrame
对象都可以使用。
df = pd.DataFrame({
"one": [1, 2, np.nan, 5, np.nan, np.nan, 68],
"two": ["a","b","c",np.nan,"f",np.nan,"g"]})
df.isnull() # notnull()则相反,非空的显示True
输出:
one two
0 False False
1 False False
2 True False
3 False True
4 True False
5 True True
6 False False
处理缺失值
*
Pandas
中可以通过fillna()
函数来用非空数据填充NA
值,如果想排除缺少的值,可以使用dropna()
函数。
填充:
df = pd.DataFrame({
"one": [1, 2, np.nan, 5, np.nan, np.nan, 68],
"two": ["a","b","c",np.nan,"f",np.nan,"g"]})
df.fillna("a") #可以填充标量
输出:
one two
0 1 a
1 2 b
2 a c
3 5 a
4 a f
5 a a
6 68 g
删除缺失值时,可以传入axis
参数,axis=0
时则整行被删除,反之则整列被删除。默认值为0
。
df = pd.DataFrame({
"one": [1, 2, np.nan, 5, np.nan, np.nan, 68],
"two": ["a","b","c",np.nan,"f",np.nan,"g"]})
df.dropna()
输出:
one two
0 1.0 a
1 2.0 b
6 68.0 g
重复值处理
检查重复值
Pandas
中的duplicated()
返回bool
的Series
序列表示该行是不是重复值。
df = pd.DataFrame({
"one": [1, 2, np.nan, 1, np.nan, np.nan, 68],
"two": [1,"b","c",1,"f",np.nan,"g"]})
df.duplicated()
输出:
0 False
1 False
2 False
3 True
4 False
5 False
6 False
dtype: bool
重复值处理
drop_duplicates()
直接对重复数据(行)进行删除,返回DataFrame
。
df = pd.DataFrame({
"one": [1, 2, np.nan, 1, np.nan, np.nan, 68],
"two": [1,"b","c",1,"f",np.nan,"g"]})
df.drop_duplicates()
输出:
one two
0 1.0 1
1 2.0 b
2 NaN c
4 NaN f
5 NaN NaN
6 68.0 g
可以传入一个列名参数,该列的所有重复行将会删除:
df.drop_duplicates("one")
输出:
one two
0 1.0 1
1 2.0 b
2 NaN c
6 68.0 g
异常值处理
检测异常值
发现异常值的方法是对数据进行描述性统计。使用describe
函数可以生成描述统计结果,然后观察异常值的存在。超出数据正常范围的值即为异常值。
data ={
'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Minsu','Jack','Lee']),
'Age':pd.Series([25,26,25,23,30,29,23,34]),
'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78])}
df = pd.DataFrame(d)
df.describe()
输出:
Age Rating
count 12.000000 12.000000
mean 31.833333 3.743333
std 9.232682 0.661628
min 23.000000 2.560000
25% 25.000000 3.230000
50% 29.500000 3.790000
75% 35.500000 4.132500
max 51.000000 4.800000
异常值处理
检测到了异常值,我们需要对其进行一定的处理。而一般异常值的处理方法可大致分为以下几种:
- 直接将含有异常值的记录删除;
- 将异常值视为缺失值,利用缺失值处理的方法进行处理;
- 可用前后两个观测值的平均值修正该异常值;
- 直接在具有异常值的数据集上进行数据挖掘。
是否要删除异常值可根据实际情况考虑。因为一些模型对异常值不很敏感,即使有异常值也不影响模型效果。
编程要求
按照以下要求,补全右侧代码:
通过read_csv
函数读取step2/message.csv
文件中的数据,输出删除NA
值以及重复值之后的结果,并重置索引列
message.csv
说明:
列名 | 说明 |
---|---|
name | 姓名 |
year | 工作年份 |
salary | 薪水 |
预期输出:
index name year salary
0 0 Braund 1 550.000
1 1 Cumings 14 700.000
2 2 Heikkinen 3 240.000
3 4 Allen 2 775.000
4 5 Moran 11 175.000
5 7 Palsson 3 135.000
6 8 Johnson 2 100.000
7 9 Nasser 13 115.000
8 12 Saundercock 4 776.667
9 13 Andersson 6 765.000
10 14 Vestrom 13 708.333
11 15 Masselmani 8 110.000
12 16 Williams 5 900.000
13 20 Beesley 1 612.500
14 21 McGowan 6 300.000
15 24 Asplund 6 90.000
开始你的任务吧,祝你成功!
import pandas as pd
def clean():
#********** Begin *********#
df = pd.read_csv("step2/message.csv")
df1 = df.dropna()
return df1.drop_duplicates().reset_index()
#********** End **********#
if __name__ == '__main__':
print(clean())