导入.xls文件或xlsx文件
导入.xls或xlsx文件主要使用的是Pandas的read_excel()方法
css
pandas.read_excel(io,sheet_name=0,header=0,names=None,index_col=None,usecols=None,squeeze=False)
常用参数说明: io:字符串,.xls或.xlsx文件路径或类文件对象。
sheet_name:None、字符串、整数、字符串列表或整数列表,默认值为0。字符串用于工作表名称,整数为索引表示工作表位置,字符串列表或整数列表用于请求多个工作表,为None时获取所有工作表。
header:指定作为列名的行,默认值为0,即取第一行的值为列名。数据为除列名以外的数据,若数据不包含列名,则设置header=None。
names:默认值为None,要使用的列名列表。
index_col:指定列为索引列,默认值为None,索引0是DataFrame的行标签。
usecols:int、list或字符串,默认值为None。
squeeze:布尔值,默认值为Flase,如果解析的数据值包含一列,则返回一个Series。
sheet_name:参数值
常规导入
python
import pandas as pd
# 解决数据输出时列名不对齐的问题
# pd.set_option('display.unicode.east_asian_width',True)
df = pd.read_excel('1月.xlsx')
print(df.head())
导入指定的sheet页面
一个Excel可能包含多个Sheet页,通过设置sheet_name参数就可以导入指定Sheet页的数据。
python
import pandas as pd
df=pd.read_excel('1月.xlsx',sheet_name='白桦')
print(df.tail())
除了指定sheet页的名字,还可以指定Sheet的顺序,从0开始。例如,sheet_name=0 表示第一个sheet页的数据,以此类推。如果不指定sheet_name的情况下,则默认导入第一个Sheet页面的数据。
通过行、列索引导入指定行、列数据
DataFrame是二维数据结构,因此它既有行索引也有列索引。当导入Excel数据时,行索引会自动生成,而列索引则默认将第0行作为列索引。
DataFrame行、列索引示意图
指定行索引导入Excel数据
如果要指定行索引
导入Excel数据,则需要设置index_col
参数。
python
import pandas as pd
# 解决数据输出时列名不对齐的问题
pd.set_option('display.unicode.east_asian_width',True)
# "买家会员名"作为行索引
df1 = pd.read_excel('1月.xlsx',index_col=1) #选取第2列作为行索引
print(df1.head())
指定列索引导入Excel数据
如果要指定列索引
导入Excel数据,则需要设置header
参数。
python
import pandas as pd
# 解决数据输出时列名不对齐的问题
pd.set_option('display.unicode.east_asian_width',True)
print('xxxxxxxxxxxxxxxxxxxx')
df2 = pd.read_excel('1月.xlsx',header=1) # 设置第一行为列索引
print(df2.head())
print('xxxxxxxxxxxxxxxxxxxx')
df3 = pd.read_excel('1月.xlsx',header=None) # 列索引为数字
print(df3.head())
指定索引的目的在于能够通过索引快速的检索数据。
导入指定列数据
一个Excel表格中往往包含多列数据,如果只需要其中的几列,可以通过usecols参数指定需要的列,从0开始以此类推。
ini
import pandas as pd
pd.set_option('display.unicode.east_asian_width',True)
df = pd.read_excel('1月.xlsx') # 导入第一列
print(df.head())
df1 = pd.read_excel('1月.xlsx', usecols=[0]) # 导入第一列
print(df1.head())
# 导入多列 指定多个值
df2 = pd.read_excel('1月.xlsx', usecols=[0, 3]) # 导入第一列和第四列
print(df2.head())
# 指定列名称
df3 = pd.read_excel('1月.xlsx', usecols=['买家会员名', '宝贝标题']) # 导入"买家会员名列"和"宝贝标题列"
print(df3.head())
导入.csv文件
导入.csv文件主要使用Pandas的read_csv()方法常用参数说明:
python
import pandas as pd
# 解决数据输出时列名不对齐的问题
pd.set_option('display.unicode.east_asian_width',True)
df1 = pd.read_csv('1月.csv',encoding='gbk') # 导入csv文件 并指定编码
print(df1.head()) # 输出前五条数据
"""
注意点:
当将excel文件另存为csv文件时 默认编码的格式为gbk
此时当我们编写代码导入csv文件时,需要设置编码格式为gbk
与源文件当编码格式保持一致,否则则会提示报错。
"""
导入.txt文件
导入txt文件同样使用我们Pandas中的read_csv()方法 不同的是需要指定sep参数,read_csv()读取txt文件返回的是一个DataFrame,像表格一样的二维数据结构。
txt文件形式是没有格式的,如下图
python
import pandas as pd
pd.set_option('display.unicode.east_asian_width',True)
# 手动创建1月.txt 当前编码切换为utf-8
df1 = pd.read_csv('1月.txt',encoding='gbk',sep='\t')
print(df1.head())
导入html网页
导入HTML网页网页数据主要使用Pandas中的read_html()方法,该方法用于导入带有table标签的网页表格数据。语法如下:
sql
pandas.read_html(io,match='.+',flavor=None,header=None,index_col=None,
skiprows=None, attrs=None,parse_dates=False,
thousands=', ', encoding=None, decimal='.', converters=None,
na_values=None, keep_default_na=True, displayed_only=True)
常用参数说明:
注意点:
在使用read_html()方法前,首先必须要确定网页表格是否为table类型。查看代码中的elements看是否有<table>......</table>的标签,确定该标签存在之后才能够使用read_html()方法。
ini
import pandas as pd
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
df1 = pd.DataFrame()
url = 'https://www.espn.com/nba/salaries'
df2 = pd.read_html(url)
print(df2)
# 数据合并
df = pd.concat([df1,df2[0]],ignore_index=True)
print(df,type(df))
# 导出csv文件
df.to_csv('NBA.csv',header=False, index=False)
loc和iloc属性
数据分析过程中,并不是所有的数据都是我们想要的,此时可以抽取部分数据,主要使用DataFrame对象的loc属性和iloc属性。
loc属性和iloc属性示意图
对象的loc属性和iloc属性都可以抽取数据,区别如下:
loc属性
:以列名
(columns)和行名(index)作为参数
,当只有一个参数时,默认是行名,即抽取整行数据,包括所有列,如df.loc['A']
iloc属性
:以行和列位置索引
(即0,1,2,...)作为参数
,0表示第1行,1表示第2行,以此类推。当只有一个参数时,默认是行索引,即抽取整行数据,包括所有列。如抽取第1行数据,df.iloc[0]
抽取一行数据
抽取一行数据主要使用loc属性
scss
import pandas as pd
# 抽取阿乔同学的成绩数据
data = [[110,123,132],[98,88,97],[101,102,103],[110,121,109]]
index = ['阿岳','阿乔','阿萧','阿蓝']
columns = ['语文','数学','英语']
df = pd.DataFrame(data=data,index=index,columns=columns)
print(df)
print('--'*10)
# 行名为阿乔
print(df.loc['阿乔'])
print('--'*10)
# 行索引为1
print(df.iloc[2])
抽取多行数据
抽取任意多行数据
通过loc属性和iloc属性置顶行名和行索引即可实现抽取任意多行数据
lua
import pandas as pd
# 抽取阿乔和阿岳同学的成绩数据
data = [[110,123,132],[98,88,97],[101,102,103],[110,121,109]]
index = ['阿岳','阿乔','阿萧','阿蓝']
columns = ['语文','数学','英语']
df = pd.DataFrame(data=data,index=index,columns=columns)
print(df)
print('xx'*100)
print(df.loc[['阿乔','阿岳']])
print('xx'*100)
print(df.iloc[[0,1]])
抽取连续任意多行数据
在loc属性和iloc属性中合理地使用冒号(:),即可抽取连续任意多行数据
scss
import pandas as pd
data = [[110,123,132],[98,88,97],[101,102,103],[110,121,109]]
index = ['阿岳','阿乔','阿萧','阿蓝']
columns = ['语文','数学','英语']
df = pd.DataFrame(data=data,index=index,columns=columns)
print(df)
print('xx'*100)
print(df.loc['阿岳':'阿萧']) #包头包尾
print('xx'*100)
print(df.iloc[0:2]) #包头不包尾
抽取指定列数据
抽取指定列数据,可以直接使用列名,也可以使用loc属性和iloc属性。
直接使用列名
lua
import pandas as pd
data = [[110,123,132],[98,88,97],[101,102,103],[110,121,109]]
index = ['阿岳','阿乔','阿萧','阿蓝']
columns = ['语文','数学','英语']
df = pd.DataFrame(data=data,index=index,columns=columns)
print(df)
print('xx'*100)
print(df[['语文','数学']])
使用loc属性和iloc属性
loc和iloc有两个参数,第一个为行参数,第二个为列参数,这里抽取数据指定列数据时,行参数不能省略
。
scss
import pandas as pd
data = [[110,123,132],[98,88,97],[101,102,103],[110,121,109]]
index = ['阿岳','阿乔','阿萧','阿蓝']
columns = ['语文','数学','英语']
df = pd.DataFrame(data=data,index=index,columns=columns)
print(df)
print(df.loc[:,['语文','数学']])
print(df.iloc[:,[0, 2]]) #第一列和第三列
print(df.loc[:,'语文':]) #语文之后全部的列
print(df.iloc[:,2:3]) #包头不包尾
抽取指定行、列数据
抽取指定行、列数据数据主要用到loc属性和iloc属性,这两个方法的参数都指定就可以实现指定行、列数据的抽取。
lua
import pandas as pd
data = [[110,123,132],[98,88,97],[101,102,103],[110,121,109]]
index = ['阿岳','阿乔','阿萧','阿蓝']
columns = ['语文','数学','英语']
df = pd.DataFrame(data=data,index=index,columns=columns)
print(df)
print(df.loc['阿岳','英语']) # 备注一:英语成绩
print(df.loc[['阿岳'],['英语']]) # 备注二:阿岳的英语成绩
print(df.loc[['阿岳'],['英语','数学']]) # 阿岳的英语和数学成绩
print(df.iloc[[1],[2]]) # 第二行 第三列
print(df.iloc[1:,[2]]) # 第二行到最后一行的第三列
print(df.iloc[1:,[0,2]]) # 第二行到最后一行的第一和第三列
print(df.iloc[:,2]) # 所有行,第三列
注意:(此结果为备注一和备注二的结果)
按指定条件抽取数据
DataFrame对象实现数据查询有以下三种方式。
1、 取其中一个元素 .at[x,x]、.iat[x,x]
2、基于位置的查询 如 .iloc[]、.iloc[2,1]。
3、基于行、列名称的查询,如.loc[x]
css
import pandas as pd
data = [[110,123,132],[98,88,97],[101,102,103],[110,121,109]]
index = ['阿岳','阿乔','阿萧','阿蓝']
columns = ['语文','数学','英语']
df = pd.DataFrame(data=data,index=index,columns=columns)
# print(df)
# 选取阿岳行的语文列
print(df.at['阿岳','语文']) #print(df.loc[0,1])
# 选取第一行第二列
print(df.iat[0,1]) #print(df.iloc[0,1])
# 筛选出语文大于100 数学大于 120的信息
print(df.loc[(df['语文']>100) & (df['数学']>120)])