今日学习阶段:
1.DataFrame对象
DataFrame是Pandas库中的一种数据结构,它是由多种类型的列组成的二维表数据结构,类似于Excel、SQL或Series对象构成的字典。DataFrame是最常用的Pandas对象,它与Series对象一样支持多种类型的数据。
1.1图解DataFrame对象
Dataframe既有行索引也有列索引,它可以看作是由Series对象组成的字典,不过这些Series对象共用一个索引。
import pandas as pd
pd.set_option('display.unicode.east_asian_width', True)
data = [[110, 105, 99], [105, 88, 115], [109, 120, 130]]
index = [0, 1, 2]
columns = ['语文', '数学', '英语']
df = pd.DataFrame(data = data, index = index, columns = columns)
print(df)
for col in df.columns:
series = df[col]
print(series)
输出结果
语文 数学 英语
0 110 105 99
1 105 88 115
2 109 120 130
0 110
1 105
2 109
Name: 语文, dtype: int64
0 105
1 88
2 120
Name: 数学, dtype: int64
0 99
1 115
2 130
Name: 英语, dtype: int64
1.2创建一个DataFrame对象
创建主要使用DataFrame方法,语法如下:
pandas.DataFrame(data, index, columns, dtype, copy)
1.2.1 通过二维数组创建DataFrame
import pandas as pd
pd.set_option('display.unicode.east_asian_width', True)
data = [[110, 105, 99], [105, 88, 115], [109, 120, 130]]
columns = ['语文', '数学', '英语']
df = pd.DataFrame(data = data, columns = columns)
print(df)
输出结果
语文 数学 英语
0 110 105 99
1 105 88 115
2 109 120 130
1.2.2通过字典创建成绩表
import pandas as pd
pd.set_option('display.unicode.east_asian_width', True)
df = pd.DataFrame({
'语文':[110, 105, 99],
'数学':[105, 88, 115],
'英语':[109, 120, 130],
'班级':'高一7班'
}, index = [0, 1, 2])
print(df)
输出结果
语文 数学 英语 班级
0 110 105 109 高一7班
1 105 88 120 高一7班
2 99 115 130 高一7班
在以上代码中,“班级”的value值是单个数据,所以每一行都添加了相同的数据“高一7班”。
2.导入外部数据
2.1导入.xls或.xlsx文件
主要使用Pandas的read_excel方法
pandas.read_excel()内部语法自行查询
import pandas as pd
#解决数据输出时列名不对齐问题
pd.set_option('display.unicode.east_asian_width', True)
df = pd.read_excel('1月.xlsx')
print(df.head()) #输出前5条数据
输出结果
买家会员名 买家实际支付金额 收货人姓名 宝贝标题
0 mrhy1 41.86 周某某 零基础学Python
1 mrhy2 41.86 杨某某 零基础学Python
2 mrhy3 48.86 刘某某 零基础学Python
3 mrhy4 48.86 张某某 零基础学Python
4 mrhy5 48.86 赵某某 C#项目开发实战入门
2.1.1导入指定sheet页
一个Excel文件包含多个Sheet页,通过设置sheet_name参数就可以导入指定Sheet页的数据。
import pandas as pd
pd.set_option('display.unicode.east_asian_width', True)
df=pd.read_excel('1月.xlsx', sheet_name='莫寒')
print(df.head())
运行程序输出部分数据
买家会员名 买家支付宝账号 买家实际支付金额 订单状态 ... 订单备注 宝贝总数量 类别 图书编号
0 mmbooks101 ******** 41.86 交易成功 ... 'null 1 全彩系列 B16
1 mmbooks102 ******** 41.86 交易成功 ... 'null 1 全彩系列 B16
2 mmbooks103 ******** 48.86 交易成功 ... 'null 1 全彩系列 B17
3 mmbooks104 ******** 48.86 交易成功 ... 'null 1 全彩系列 B17
4 mmbooks105 ******** 48.86 交易成功 ... 'null 1 全彩系列 B18
除了直到名字,还可以指定顺序,从0开始,例如,“sheet_name=0”表示导入第一个sheet页的数据,“sheet_name=1”表示导入第二个Sheet页的数据,以此类推。
如果不指定sheet_name参数,则默认导入第一个Sheet页的数据
2.1.2通过行列索引导入指定行列数据
DataFrame是二维数据结构,因此它既有行索引又有列索引。当导入Excel数据时,行索引会自动生成,如0,1,2,而列索引则默认将第0行作为列索引。
如果指定行索引导入Excel数据,需要设置index_col参数。如下
import pandas as pd
pd.set_option('display.unicode.east_asian_width', True)
df1=pd.read_excel('1月.xlsx', index_col=0)
print(df1.head())
输出结果
买家实际支付金额 收货人姓名 宝贝标题
买家会员名
mrhy1 41.86 周某某 零基础学Python
mrhy2 41.86 杨某某 零基础学Python
mrhy3 48.86 刘某某 零基础学Python
mrhy4 48.86 张某某 零基础学Python
mrhy5 48.86 赵某某 C#项目开发实战入门
如果通过指定列索引导入excel数据,则需要设置header参数,如下:
import pandas as pd
pd.set_option('display.unicode.east_asian_width', True)
df2=pd.read_excel('1月.xlsx', header=1)
print(df2.head())
输出结果
mrhy1 41.86 周某某 零基础学Python
0 mrhy2 41.86 杨某某 零基础学Python
1 mrhy3 48.86 刘某某 零基础学Python
2 mrhy4 48.86 张某某 零基础学Python
3 mrhy5 48.86 赵某某 C#项目开发实战入门
4 mrhy6 48.86 李某某 C#项目开发实战入门
如果将数字作为列索引,可以设置header参数为None,如下:
import pandas as pd
pd.set_option('display.unicode.east_asian_width', True)
df3=pd.read_excel('1月.xlsx', header=None)
print(df3.head())
输出结果
0 1 2 3
0 买家会员名 买家实际支付金额 收货人姓名 宝贝标题
1 mrhy1 41.86 周某某 零基础学Python
2 mrhy2 41.86 杨某某 零基础学Python
3 mrhy3 48.86 刘某某 零基础学Python
4 mrhy4 48.86 张某某 零基础学Python
2.1.3导入指定列数据
可以通过usecols参数指定需要的列,从0开始(表示第1列,以此类推)
import pandas as pd
pd.set_option('display.unicode.east_asian_width', True)
df1=pd.read_excel('1月.xlsx', usecols=[0])
print(df1.head())
注意参数为列表
输出结果
买家会员名
0 mrhy1
1 mrhy2
2 mrhy3
3 mrhy4
4 mrhy5
如果导入多列,则可以在列表中指定多个值
df1=pd.read_excel('1月.xlsx', usecols=[0, 3])
不可以使用切片
也可以指定列名称
df1=pd.read_excel('1月.xlsx', usecols=['买家会员名', '宝贝标题'])
输出结果
买家会员名 宝贝标题
0 mrhy1 零基础学Python
1 mrhy2 零基础学Python
2 mrhy3 零基础学Python
3 mrhy4 零基础学Python
4 mrhy5 C#项目开发实战入门
2.2导入.csv文件
导入.csv文件时主要使用Pandas的read_csv方法
pandas.read_csv() 参数自行查询
import pandas as pd
pd.set_option('display.max_columns', 500)
pd.set_option('display.width', 1000)
pd.set_option('display.unicode.east_asian_width', True)
df1=pd.read_csv('1月.csv', encoding='gbk')
print(df1.head())
上述代码中指定了编码格式,即encoding='gbk'。Python常用的编码格式是UTF-8和GBK格式,默认格式为UTF-8.导入.csv文件需要用encoding指定编码格式。将excel文件另存为.csv文件时,默认编码格式为GBK,此时导入就需要设置为GBK,与原文件保持一致,否则会报错。
2.3导入txt文件
导入.txt文件同样使用Pandas模块的read_csv方法,不同的是需要指定sep参数(如制表符\t)。read_csv方法读取.txt文件后将返回一个DataFrame对象,像表格一样的二维数据结构。
import pandas as pd
df1=pd.read_csv('1月.txt', sep='\t', encoding='gbk')
print(df1.head())
2.4导入HTML网页
导入HTML网页数据主要使用Pandas的read_html方法,该方法用于导入带有table标签的网页表格数据
pandas.read_html()参数自行查询
使用read_html方法前,首先要确定网页表格是否为table标签。右键检查表格元素,查看代码是否含有<table>...</table>字样,确定后才可以使用。
import pandas as pd
df = pd.DataFrame()
url_list = ['http://www.espn.com/nba/salaries/_/seasontype/4']
for i in range(2, 13):
url = 'http://www.espn.com/nba/salaries/_/page/%s/seasontype/4' % i
url_list.append(url)
#遍历网页中的table读取网页表格数据
for url in url_list:
df = df.append(pd.read_html(url), ignore_index=True)
#列表解析:遍历dataframe第3列,以子字符串$开头
df = df[[x.startswith('$') for x in df[3]]]
print(df)
df.to_csv('NBA.csv',header=['RK','NAME','TEAM','SALARY'], index=False)
输出结果
0 1 2 3
1 1 Stephen Curry, PG Golden State Warriors $48,070,014
2 2 Russell Westbrook, PG Los Angeles Lakers $47,063,478
3 3 LeBron James, SF Los Angeles Lakers $44,474,988
4 4 Kevin Durant, PF Brooklyn Nets $44,119,845
5 5 Bradley Beal, SG Washington Wizards $43,279,250