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)])
相关推荐
小王子10243 分钟前
数据结构与算法Python版 二叉查找树
数据结构·python·算法·二叉查找树
编程阿布11 分钟前
Python基础——多线程编程
java·数据库·python
又蓝13 分钟前
使用 Python 操作 MySQL 数据库的实用工具类:MySQLHandler
数据库·python·mysql
dundunmm15 分钟前
机器学习之pandas
人工智能·python·机器学习·数据挖掘·pandas
好学近乎知o15 分钟前
常用的Django模板语言
python·django·sqlite
小火炉Q25 分钟前
16 循环语句——for循环
人工智能·python·网络安全
segwyang28 分钟前
Maven 项目模板
java·python·maven
凡人的AI工具箱33 分钟前
每天40分玩转Django:Django文件上传
开发语言·数据库·后端·python·django
小码编匠1 小时前
2024 年各编程语言运行百万并发任务需多少内存?
java·后端·python