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。

本期分享到此结束,有何问题随时交流。

相关文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: