内容正文:
4.2
pandas处理数据
编程处理数据
数据处理可以使用现成的软件或平台,也可以通过编写程序实现。Python语言丰富的标准模块和扩展库提供了许多高效灵活的函数,可以帮助我们较好地进行数据整理。
pandas处理数据
numpy模块是Python中做科学计算的基础库,主要提供科学计算中常用的随机数、数组运算等基础函数。
scipy模块是基于numpy构建的一个模块,增强了在高等数学、信号处理、图像处理、统计等方面的处理能力。
pandas模块基于numpy实现,主要用于数据的处理和分析。它提供了大量处理数据的函数和方法,能方便地操作大型数据集。
python模块的导入——import
一个程序中已出现的一个或多个函数或模块,引入到另一个python代码中,从而实现代码的复用。语法如下:
import 模块名
模块名.函数名
from 模块名 import 函数名
python模块的小名儿
import 还有更多详细的用法,导入整个模块时,也可以为模块指定别名。
import 模块名1 [as 别名1]
例如:import math as s
print(s.sqrt(9))
from 模块名 import 成员名1 [as 别名1]
例如:from math import sqrt as v
print(v(9))
Series是一种一维的数据结构,包含一个数组的数据(values)和一个与数据关联的索引(index)。
1、导入pandas模块
import pandas as pd
2、创建一个Series对象
S=pd.Series(x[,index=idx])
X可以是:
1、列表(list)
2、字典(dict)
3、numpy数组(ndarray)
1. 创建Series(序列)
Series类似于一维数组,由一个数组的数据和一个与数据关联的索引(index)组成,索引值默认是从0起递增的整数。
import pandas as pd #导入pandas模块并取别名为pd
s1 = pd.Series([1, 2, 3, 4])
print(s1)
0 1
1 2
2 3
3 4
左列:index(索引)
右列:values(值)
Series
Series
s2 = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
print(s2)
a 1
b 2
c 3
d 4
Series结构与列表最大的区别是可以指定索引,类型可以是字符串型
index
values
创建一个别名为pd1 的 Series结构对象w,用于存储中餐站台当中的“滑蛋虾仁”,“荔枝鸡片”,“XO酱炒牛肉” ,并输出。
通过字典方式创建
data = {"i1":1,"i2":2,"i3":3,"i4":4}
s3 = pd.Series(data)
print(s3)
i1 1
i2 2
i3 3
i4 4
Series
通过字典方式创建
data = {"i1":1,"i2":2,"i3":3,"i4":4}
s3 = pd.Series(data,index=['i1','i3','i2','i4'])
print(s3)
i1 1
i3 3
i2 2
i4 4
Series
修改series对象中的值
先通过索引值选取值,再通过赋值语句修改值
指定索引以后,原来默认的索引值还能用吗?
Series对象常用属性
属性 说明
index Series的下标索引,其值默认是从0起递增的整数
values 存放Series值的一个数组
3. 查看Series对象的index、values属性值
s2 = pd.Series(['你','好','聪','明'], index=['a', 'b', 'c', 'd'])
for i in s2.index:
print(i)
a
b
c
d
Series对象常用属性
3. 查看Series对象的index、values属性值
s2 = pd.Series(['你','好','聪','明'], index=['a', 'b', 'c', 'd'])
for i in s2.values:
print(i)
你
好
聪
明
Series对象常用属性
3. 查看Series对象的index、values属性值
s2 = pd.Series(['你','好','聪','明'], index=['a', 'b', 'c', 'd'])
for i in s2:
print(i)
你
好
聪
明
Series对象常用属性
课堂练习
1. 下列Python的模块中,主要用于数据的处理和分析的是( )
A.Image
B.pandas
C.scipy
D.matplotlib
B
课堂练习
2.有Python程序段如下:
import pandas as pd
ser = pd.Series([1,3,5,7])
print(ser.index)
该程序段运行后输出结果为( )
A
A.0 B.1 C.1 D. 0 1
1 2 3 1 3
2 3 5 2 5
3 4 7 3 7
课堂练习
3.有Python程序段如下:
import pandas as pd
s=pd.Sreies([166,178,180],index=['S1','S2','S3'])
s[1]=168
print(s)
该程序段运行后输出结果为( )
A. [168 178 180] B.[166 168 180]
C.S1 166 D.S1 168
S2 168 S2 178
S3 180 S3 180
C
课堂练习
4.有Python程序段如下:
import pandas as pd
s=pd.Sreies(range(1,10,2))
print(s)
该程序段运行后输出结果为( )
A. 0 1 B.1 1 C.0 1 D.1 1
1 10 2 10 1 3 2 3
2 5 3 5
3 7 4 7
4 9 5 9
C
pandas数据结构
2. DataFrame(数据框)
DataFrame是一种类似于关系表的表格型数据结构,DataFrame对象是一个二维表格,由1个索引列(index)和若干个数据列组成。其中,每列中的元素类型必须一致,而不同的列可以拥有不同的元素类型。
利用字典创建DataFrame
使用DataFrame前,需要导入pandas库中的DataFrame模块
from pandas import DataFrame
data = {"name":["王晓明","李静","田海"], "sex":["男","女","男"], "aged":[20,19,21]}
#字典是无序的,因此需要通过columns指定列索引的排列顺序
df = DataFrame(data,columns=["name","sex","aged"])
print(df)
index
columns
values
利用字典创建DataFrame
DataFrame数据有列索引和行索引,行索引类似于关系表中每行的编号(未指定行索引的情况下,会使用0到n-1作为行索引),列索引类似于表格的列名(也称为字段)。
df1 = DataFrame(data,columns = ["name","sex","aged"],index = ["L1","L2","L3"])
print(df1)
利用字典创建DataFrame
__________________ #导入模块
data = { "name":["张三","李四","王五","赵六"], "sex":["男","女","女","男"], "aged":[20,19,20,21], "score":[80,60,70,90]}
df = pd.DataFrame(data,columns=["aged","name","score","sex"])
print(df)
import pandas as pd
创建DataFrame对象
DataFrame对象可以自己定义,也可以直接读取二维数据文件创建DataFrame对象。
read_excel()函数 读取Excel文件创建DataFrame对象
read_csv()函数 读取CSV文件创建DataFrame对象
to_excel()函数 创建Excel文件保存数据
to_csv()函数 创建CSV文件保存数据
创建DataFrame对象
读入文件
使用read_excel()函数,读取Excel文件创建DataFrame对象。
import pandas as pd
df=pd.read_excel("cp.xlsx")
print(df)
查看DataFrame对象
通过index、columns、values属性可以查看DataFrame对象的行索引、列索引及其数据,如df.index、df.columns、df.values。
import pandas as pd
df=pd.read_excel("cp.xlsx")
for i in df.index:
print(i)
查看DataFrame对象
通过index、columns、values属性可以查看DataFrame对象的行索引、列索引及其数据,如df.index、df.columns、df.values。
import pandas as pd
df=pd.read_excel("cp.xlsx")
print(df.T) #行列转置,df数据本身不变
print(df)
查看DataFrame对象
查看数据列
使用字典记法或属性检索DataFrame对象中的一列数据,如df['id']或df.id。
import pandas as pd
df=pd.read_excel("cp.xlsx")
print(df.影视剧)
import pandas as pd
df=pd.read_excel("cp.xlsx")
print(df____________)
[“影视剧”]
pandas数据结构
DataFrame模块提供了丰富的函数,这些函数可以用来进行行、列编辑等。
DataFrame中,新增列、删除列、重命名列可以通过insert()、drop()、rename()等函数完成;追加数据行可以通过append()函数完成;使用set_value()函数可以根据行标签和列标签设置单个值。
pandas数据结构
1.增加行
增加行数据可以通过append()函数传入字典数据即可。
import pandas as pd
df=pd.read_excel("cp.xlsx")
append_data={"影视剧":"凤囚凰","cp名":"初融夫妇","男角色":"容止","女角色":"刘楚玉"}
new_df=df.append(append_data,ignore_index=True)
print(new_df)
pandas数据结构
2.增加列
增加列可以直接通过标签索引方式进行,当新增的列中的数值不一样时,可以传入列表或者数组结构进行赋值。
import pandas as pd
df=pd.read_excel("cp.xlsx")
df["结局"]=["HE","HE","BE","HE"]
print(df)
pandas数据结构
3. 删除
使用drop()函数可以删除指定轴上的信息,axis=0删除行,axis=1删除列,默认axis=0,原来的DataFrame数据不会删除。
import pandas as pd
df=pd.read_excel("cp.xlsx")
df["结局"]=["HE","HE","BE","HE"]
df1=df.drop(2)
print(df1)
pandas数据结构
3. 删除
请补充代码,实现删除”影视剧”一列。
如何使原来的df对象中的”影视剧”一列也被删除?
import pandas as pd
df=pd.read_excel("cp.xlsx")
df["结局"]=["HE","HE","BE","HE"]
__________________________
print(df)
del df.影视剧
pandas数据结构
4.修改标签
通过rename()函数完成行和列索引标签的修改,index参数指定要修改的行标签,columns参数指定要修改的列标签。
import pandas as pd
df=pd.read_excel("cp.xlsx")
df["结局"]=["HE","HE","BE","HE"]
df1=df.rename(index={3:9},columns={"结局":"ending"})
print(df1)
课堂练习
1.有Python程序段如下:
import pandas as pd
df1=pd.DataFrame([[10,20],[30,40]],columns=['A','B'])
df2=pd.DataFrame([[50,60],[70,80]],columns=['A','B'])
df=df1.append(df2,ignore_index=True)
print(df)
该程序段运行后输出结果为( )
A.A B B.A B C.A B D.A B
10 30 10 20 0 10 20 0 10 20
20 40 30 40 1 30 40 1 30 40
50 70 50 60 0 50 60 2 50 60
60 80 70 80 1 70 80 3 70 80
D
查看DataFrame对象
修改数据列
使用字典记法或属性检索DataFrame对象中的一列数据,如df['id']或df.id。
import pandas as pd
df=pd.read_excel("cp.xlsx")
df.男角色=['成毅','白敬亭','张若昀','任国超']
print(df)
查看DataFrame对象
查看数据行
通过head()、tail()返回DataFrame对象中前n行、后n行的数据。
import pandas as pd
df=pd.read_excel("cp.xlsx")
df.男角色=['成毅','白敬亭','张若昀','任国超']
print(df.head(2))
print(df.tail(1))
查看DataFrame对象
查看数据行
通过索引查看指定的行数据,如df[2:5]返回df对象中索引值为2,3,4的行数据。
import pandas as pd
df=pd.read_excel("cp.xlsx")
df.男角色=['成毅','白敬亭','张若昀','任国超']
print(df[1:3])
统计、计算
在DataFrame中,可以使用count()、sum()、mean()、max()、min()、describe()、groupby()等函数对DataFrame对象中的数据统计与计算。
统计、计算
1.分组
使用groupby()函数,可以对DataFrame对象各列或各行中的数据进行分组,然后对其中每一组数据进行不同的操作。
import pandas as pd
df=pd.read_excel("grade.xlsx")
df1=df.groupby('sex')
print(df1.mean())
排序
在DataFrame中,按索引排序可以使用sort_index()函数,按值排序可以使用sort_values()函数。通过axis确定轴向,通过ascending确定顺序,排序结果返回一个新的DataFrame对象。
排序
2.排序
axis默认为0,对行排序,=1时,对列排序。
ascending默认为True,升序排序,=False时,降序排序。
import pandas as pd
df=pd.read_excel("grade.xlsx")
df1=df.sort_values('math',ascending=False)
print(df1)
排序
2.排序
axis默认为0,对行排序,=1时,对列排序。
ascending默认为True,升序排序,=False时,降序排序。
import pandas as pd
df=pd.read_excel("grade.xlsx")
df1=df.sort_index(ascending=False)
print(df1)
排序
2.排序
axis默认为0,对行排序,=1时,对列排序。
ascending默认为True,升序排序,=False时,降序排序。
import pandas as pd
df=pd.read_excel("grade.xlsx")
df1=df.sort_index(axis=1,ascending=False)
print(df1)
查看DataFrame对象
筛选数据行
可以通过布尔型数据选取满足条件的行。如通过df1[df1["借阅次数"]>30],可以检索df1对象中“借阅次数”大于30的数据行。
import pandas as pd
df=pd.read_excel("cp.xlsx")
df.女角色=[15,25,21,19]
#筛选出“女角色”<20的数据行
print(df[df["女角色"]<20])
查看DataFrame对象
选取单个值
使用at[]方法可以根据行标签和列标签选取单个值,如通过df1.at[0,"姓名"],可以选取df1对象中第1行、“姓名”列的值。
import pandas as pd
df=pd.read_excel("cp.xlsx")
print(df.at[2,"cp名"])
课堂小结
通过字典创建DataFrame对象
导入二维数据文件创建DataFrame对象
DataFrame对象的三个属性
查看数据列
head()、tail()
行索引
筛选数据行
挑选单个值at
课堂练习
1. 某DataFrame对象df,其中包含18000数据行个和6个数据列,下列语句中能查看df对象中数据行的是( )
A.df.index
B.df.columns
C.df.head()
D.df.count()
C
课堂练习
2. 某DataFrame对象df包含”id””name”等8个数据列、22个数据行,下列语句中能读取df对象中某些数据列中的所有数据的是( )
A.df['id']
B.df.tail()
C.df.columns
D.df[2:5]
A
$$