暑期实践第十七天 2022-7-20

今日学习阶段:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值