1. 数据筛选
1.1 数据源
为了方便后续的实验以及案例数据的存放,构建了一个虚拟的字典数据。
data = {'姓名': {0: '关羽', 1: '刘备', 2: '张飞', 3: '吕布', 4: '曹操', 5: '袁绍', 6: '夏侯惇', 7: '典韦', 8: '孙权', 9: '周瑜', 10: '黄盖', 11: '黄忠', 12: '孔明', 13: '赵云', 14: '马超', 15: '张辽'},
'籍贯': {0: '蜀国', 1: '蜀国', 2: '蜀国', 3: '魏国', 4: '魏国', 5: '魏国', 6: '魏国', 7: '魏国', 8: '吴国', 9: '吴国', 10: '吴国', 11: '蜀国', 12: '蜀国', 13: '蜀国', 14: '蜀国', 15: '魏国'},
'班级': {0: 1, 1: 1, 2: 1, 3: 1, 4: 1, 5: 1, 6: 2, 7: 2, 8: 2, 9: 2, 10: 2, 11: 3, 12: 3, 13: 3, 14: 3, 15: 3},
'语文': {0: 76, 1: 77, 2: 55, 3: 65, 4: 57, 5: 57, 6: 61, 7: 83, 8: 70, 9: 76, 10: 75, 11: 53, 12: 81, 13: 68, 14: 56, 15: 68},
'数学': {0: 55, 1: 53, 2: 76, 3: 82, 4: 56, 5: 64, 6: 70, 7: 76, 8: 82, 9: 89, 10: 53, 11: 56, 12: 85, 13: 82, 14: 50, 15: 64},
'英语': {0: 63, 1: 51, 2: 63, 3: 98, 4: 74, 5: 55, 6: 67, 7: 87, 8: 73, 9: 87, 10: 53, 11: 79, 12: 71, 13: 77, 14: 96, 15: 86}}
将上述数据转换为DataFrame,代码和可视化的结果为:
import pandas as pd
df = pd.DataFrame(data)
1.2 筛选行
1.2.1 筛选第一行:
first_line = df.loc[0:0]
对应结果为:
1.2.2 筛选前五行
first_five = df.loc[0:4]
对应结果为:
1.3 筛选列
1.3.1 筛选第一列
first_col = df.iloc[:,0]
对应的结果为:
1.3.2 筛选前5列
five_col = df.iloc[:,0:4]
对应的结果为:
1.3.3 筛选出指定一列
筛选出班级这一列:
class_df = pd.DataFrame(df.loc[:,['班级']])
对应的结果为:
1.3.4 筛选出指定多列
筛选出语文和班级这两列:
class_chinese = df.loc[:,['班级','语文']]
对应得到的结果为:
1.4 条件筛选
1.4.1 单条件筛选
筛选籍贯为蜀国的数据:
shu_df = df.loc[df['籍贯'] == '蜀国']
对应的结果为:
筛选班级不是1班的数据:
other_class_df = df.loc[df['班级'] != 1]
对应的结果为:
1.4.2 多条件并列筛选
并列条件就类似于‘or’,只需要满足诸多条件中的一个条件即可,用‘|’表示。筛选语文或者英语成绩大于等于80分的数据:
or_df = df.loc[(df['语文'] >= 80) | (df['英语'] >= 80)]
对应的结果为:
如果条件多于2个,可以采取分步骤的思路,即在or_df的基础上再进行筛选。
1.4.3 多条件同时筛选
同时条件就类似于‘and’,需要同时满足所有条件,用‘&’表示。筛选语文和英语成绩都大于等于80分的数据:
and_df = df.loc[(df['语文'] >= 80) & (df['英语'] >= 80)]
对应的结果为:
如果条件多于2个,可以采取分步骤的思路,即在and_df的基础上再进行筛选。
2. 数据运算
此处的运算针对于数值型的数据(如语文和数学对应的列),对于字符串的数据(如姓名和籍贯对应的列)也是可以相加的,但是意义不大,因此此处不再探讨。
2.1 加减乘除
加减乘除和python的基础运算是相同的,只是将基础的数据更换成对应的列名。
2.1.1 求两列之和
求语文和数学的总分:
df['语文+英语'] = df['语文'] + df['英语']
对应的结果为:
2.1.2 将某列扩大倍数
将数学的成绩转化为150分制(对应分数乘以1.5):
df['数学(150分)'] = df['数学'] * 1.5
对应结果为:
2.1.3 求两列之商
求语文和数学两科成绩的商,保留两位小数:
df['语文/数学'] = round(df['数学'] / df['语文'],2)
对应的结果为:
2.2 求极值
求语文的最高分和数学的最低分:
chinese_max = df['语文'].max()
math_min = df['数学'].min()
得到的结果分别是83和50.。
2.3 求统计值
2.3.1 求均值
求语文成绩的平均分:
chinese_mean = df['语文'].mean()
得到的结果是67.385。
2.3.2 求和
求每个人三科成绩的总分:
df['总成绩'] = df.loc[:,['语文','数学','英语']].sum(axis=1)
对应结果为:
2.3.3 求中位数
求数学成绩的中位数:
math_mid = df['数学'].median()
对应得到的结果为67。
本期分享到此结束,有何问题随时交流。