1.数据的选取
首先,导入数据集
import pandas as pd
path = r'D:\pandas\tmp\StudentsS.xlsx' # 定义一个path,令他等于数据集的地址
data = pd.read_excel(path) # 导入Excel格式文件中的数据
1.我们该如何查看学生成绩表中有哪些学生参加了考试呢?(查看学生那一列)
print(data['Name']) # data[col] 以数组Series的形式返回选取的列
# 如果想查看年龄就把['Name']更换成['Age']就行了
"""
0 Student_001
1 Student_002
2 Student_003
3 Student_004
4 Student_005
5 Student_006
6 Student_007
7 Student_008
8 Student_009
9 Student_010
10 Student_011
11 Student_012
12 Student_013
13 Student_014
14 Student_015
15 Student_016
16 Student_017
17 Student_018
18 Student_019
19 Student_020
Name: Name, dtype: object
"""
2.如何只拿到每个学生的姓名和其对应的分数呢?(通过拼接列名)
dataNew = data[['Name', 'Score']] # 以新的数据框的形式返回选取的列
print(dataNew)
2.数据的清洗
1.如何检查数据中空值出现的情况?
print(dataNew['Score'].isnull()) # 检查数据中空值出现的情况,并返回一个由布尔值组成的列
"""
0 False
1 False
2 False
3 False
4 False
5 False
6 True
7 False
8 False
9 False
10 True
11 False
12 False
13 True
14 False
15 False
16 True
17 False
18 False
19 False
Name: Score, dtype: bool
"""
2.举一反三:之 notnull()
print(dataNew['Score'].notnull()) # 检查数据中非空值出现的情况
3.举一反三:之 dropna()
print(dataNew.dropna()) # 移除数据框DataFrame中包含空值的行
# # 横向扫描 只要一行的单元格中有一个NaN就删掉这一行
"""
如果我们想移除数据框中包含空值的列呢? 那么只要在dropna()括号里填写‘axis=1’ 就可以由行变列啦
"""
"""
Name Score
0 Student_001 87.0
1 Student_002 92.0
2 Student_003 100.0
3 Student_004 73.0
4 Student_005 63.0
5 Student_006 93.0
7 Student_008 61.0
8 Student_009 85.0
9 Student_010 69.0
11 Student_012 54.0
12 Student_013 59.0
14 Student_015 59.0
15 Student_016 96.0
17 Student_018 87.0
18 Student_019 86.0
19 Student_020 94.0
"""
4.如何用0来替换空值呢?
print(dataNew.fillna(0)) # 将数据框中的所有空值替换为0
3.数据的筛选
本次所用文件:
Students.xlsx
首先导入文件:
import pandas as pd
students = pd.read_excel('tmp\Students.xlsx', index_col='ID')
要求:筛选出年龄大于等于18,小于30,且成绩大于等于85,小于等于100之间的学生
import pandas as pd
# 通过自定义函数来进行筛选
def age_18_to_30(a):
return 18 <= a < 30
def level_a(s):
return 85 <= s <= 100
students = pd.read_excel('tmp\Students.xlsx', index_col='ID')
students = students.loc[students['Age'].apply(age_18_to_30)]. \
loc[students['Score'].apply(level_a)]
print(students)
"""
Name Age Score
ID
2 Student_002 26 92
6 Student_006 20 93
9 Student_009 18 85
19 Student_019 19 86
20 Student_020 20 94
"""
import pandas as pd
# 通过匿名函数也可以进行筛选
students = pd.read_excel('tmp\Students.xlsx', index_col='ID')
students = students.loc[students.Age.apply(lambda a: 18 <= a < 30)] \
.loc[students.Score.apply(lambda s: 85 <= s <= 100)]
print(students)