本文为原创文章,未经本人允许,禁止转载。转载请注明出处。
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,否则为0。 - 按位“或”运算符
|
:只要对应的两个二进位有一个为1时,结果位就为1。 - 按位“异或”运算符
^
:当两对应的二进位相异时,结果为1。 - 按位“取反”运算符
~
:对数据的每个二进制位取反,即把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.逻辑运算符
- 逻辑“与”运算符
and
:x and y
,如果x为False,则返回x值,否则返回y值。 - 逻辑“或”运算符
or
:x or y
,如果x非0,返回x值,否则返回y值。 - 逻辑“非”运算符
not
:not 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)#不保存行索引