【Python基础】第十三课:资料处理实战应用

资料处理实战应用,位运算符,逻辑运算符

Posted by x-jeff on May 20, 2020

本文为原创文章,未经本人允许,禁止转载。转载请注明出处。

1.前言

利用之前几篇博客学习的资料处理的方法,对实际中遇到的资料进行处理。本文以一个储存学生信息的csv格式的资料为例。csv中存放的数据见下:

2.读入资料

利用pandas读入csv:

1
2
import pandas as pd
df=pd.read_csv("student.csv")

如果数据过多,可以使用df.head()查看前几行的数据。或使用df.tail()查看后几行的数据。

我们发现csv中第一列没有列名,在使用pandas读进来的时候被自动赋予了“Unnamed:0”的列名。这一列对于我们来说是没有用的,我们可以通过del df["Unnamed: 0"]删除该列。或者我们也可以将该列作为DataFrame的行索引:

1
df=pd.read_csv("student.csv",index_col=0)

得到:

3.处理缺失值

将字段“Height”中的“NoData”用缺失值表示:

1
2
import numpy as np
df.loc[df["Height"]=="NoData","Height"]=np.nan

这步操作也可以在读取csv时完成:

1
df=pd.read_csv("student.csv",na_values="NoData",index_col=0)

缺失值的处理请戳👉:【Python基础】第十一课:处理缺失值

4.查看DataFrame的信息

使用df.info()查看DataFrame的信息:

查看DataFrame的列标签df.columns

查看字段类型df.dtypes

DataFrame的叙述性统计信息df.describe()(针对连续型数据):

5.筛选字段

如果我们需要查看“Grade”字段的相关信息,例如子类别的个数以及每个子类别包含的数据条数等:

1
df["Grade"].value_counts()

只查看“Grade”为3的资料:

1
df[df["Grade"]==3]

也可以使用.loc或者.iloc选取字段,详情请戳:【Python基础】第六课:处理CSV、Excel格式的数据

可以进一步设置更为详细的筛选条件,例如:

1
df.loc[(df["Score"]>90) & (df["Grade"]==3)]

⚠️此处不能用.iloc。并且不能使用and连接。

5.1.位运算符与逻辑运算符

5.1.1.位运算符

位运算符:&|^~。针对二进制运算。

  1. 按位“与”运算符&:参与运算的两个值,如果两个相应位都是1,则该位的结果为1,否则为0。
  2. 按位“或”运算符|:只要对应的两个二进位有一个为1时,结果位就为1。
  3. 按位“异或”运算符^:当两对应的二进位相异时,结果为1。
  4. 按位“取反”运算符~:对数据的每个二进制位取反,即把1变为0,把0变为1(可方便记为:~x=-(x+1))。

‼️数值是以反码的形式存储在计算机中的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#2的反码为0000 0010
#3的反码为0000 0011
#4的反码为0000 0100
#-2的反码为1111 1110
#-3的反码为1111 1101
#-4的反码为1111 1100

#按位“与”运算
3&4#输出为0。
3&2#输出为2。
(-3)&(-4)#得到二进制数1111 1100,为-4的反码。所以输出为-4。

#按位“或”运算
3|4#输出为7。
3|2#输出为3。
(-3)|(-4)#得到二进制数1111 1101,为-3的反码。所以输出为-3。

#按位“异或”运算
3^4#输出为7。
3^2#输出为1。
(-3)^(-4)#得到二进制数0000 0001,为1的反码。所以输出为1。

#按位“取反”运算
2#2的反码按位取反为1111 1101,为-3的反码。所以输出为-3。也可快速计算-(2+1)=-3。
~(-2)#-2的反码按位取反为0000 0001,为1的反码。所以输出为1。也可快速计算-(-2+1)=1。

5.1.2.逻辑运算符

  1. 逻辑“与”运算符andx and y,如果x为False,则返回x值,否则返回y值。
  2. 逻辑“或”运算符orx or y,如果x非0,返回x值,否则返回y值。
  3. 逻辑“非”运算符notnot x,如果x为True,返回False。如果x为False,返回为True。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#逻辑“与”运算
True and True#True
True and False#False
False and True#False
False and False#False
1 and 2#1相当于True,因此返回y值,即2
0 and 2#0相当于False,因此返回x值,即0

#逻辑“或”运算
True or True#True
True or False#True
False or True#True
False or False#False
1 or 2#1非0,返回x值,即1
0 or 2#x为0,返回y值,即2

#逻辑“非”运算
not True#False
not False#True
not 2#False
not 0#True

5.1.3.位运算符与逻辑运算符的区别

逻辑运算符只能针对单个bool类型进行逻辑运算。而位运算符除了对单个bool类型进行逻辑运算外,还可以对数值进行运算。

在第5部分筛选字段中的例子:

1
df.loc[(df["Score"]>90) & (df["Grade"]==3)]

此处df["Score"]>90得到的是:

df["Grade"]==3得到的结果格式和上述相同。可见,&符号两侧并不是单一的bool值,因此此处不能使用and,而只能使用&

6.保存资料

将处理完的DataFrame保存为csv:

1
2
df.to_csv("result.csv",index_label="Index")#保存行索引,且该列的名称为“index”
df.to_csv("result.csv",index_label=False)#不保存行索引

7.代码地址

  1. 资料处理实战应用