Pandas统计分析(二)

导入.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)])
相关推荐
aliceDingYM1 小时前
Linux python3.6安装mayavi报错
linux·python·ui
.生产的驴4 小时前
SpringBoot AOP切入点表达式
spring boot·后端·python
逆水寻舟4 小时前
算法学习记录2
python·学习·算法
B站计算机毕业设计超人5 小时前
计算机毕业设计Python深度学习美食推荐系统 美食可视化 美食数据分析大屏 美食爬虫 美团爬虫 机器学习 大数据毕业设计 Django Vue.js
大数据·python·深度学习·机器学习·数据分析·课程设计·推荐算法
码农超哥同学5 小时前
Python面试题:请解释 `lambda` 函数是什么,并举一个例子
开发语言·python·面试·编程
sssjjww5 小时前
python输出日志out.log相关问题(缓存机制)
java·python·缓存
Uluoyu5 小时前
python爬虫爬取中国国际招标有限公司
开发语言·爬虫·python
Python私教6 小时前
zdppy+onlyoffice+vue3解决文档加载和文档强制保存时弹出警告的问题
vue.js·python
菜鸟赵大宝6 小时前
【Python】Python中TODO的用法解析
python·pycharm
Narutolxy6 小时前
如何高效管理和迁移Python开发环境:从Conda到纯Python的转换指南
开发语言·python·conda