今日学习阶段:
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.22通过字典创建成绩表
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], 班级 }, 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=第一个是导入的sheet页面数据,sheet_name=表示导入第二个Sheet以此类推。
如果不指定sheet_name默认导入第一个参数Sheet页的数据
2.1.指定行列数据通过行列索引导入指定行列数据
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 mry5 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