首页 > 编程语言 >Python进阶五

Python进阶五

时间:2023-05-29 19:22:59浏览次数:43  
标签:index 进阶 Python Series 数组 np pd print

常用的第三方模块

数据分析的常用模块(导师安排)

numpy

numpy就是操作多维数组,对象是ndarray,就相当于python自己内置的列表list,但是ndarray比list更高效。
type(),dtype,astype:
在numpy里面有比python内置更多的数据类型,也更精确,比如int32,uint(无符号整数),dtype和type(),都是返回对象数据类型,用法不一样,type()是括号括起来,dtype是a.dtype,除此之外,还有a.astype(int32)就是把数组a的元素都化成这样。

创建数组

注意:当创建多维数组的时候,切记子数组的数量一定要一样。

np.array()

这样是创建了一个二维数组,注意,里面的俩数组数量必须一样,不然会报错。
还有就是np.array()里面放入的可以是列表和元组,不能是字符串。

还有如果在这下面输入一行ar1.dtype,就会返回一个不知道的字符,是因为俩数组的元素不一样。

这样就可以显示数组内元素的数据类型了,这就是dtype和type的区别,就是type不能直接返回容器内部元素的数据类型。

np.arange()

np.arange()和python内置的range()一样包头不包尾。

np.linspace()

可以传入五个参数,就是会返回起始值和终止值按数量n,平均分n个。
np.linspace(起始值,终止值,数量n,endpoint(默认True,使包尾),retstep(返回结果和间距))

数组ndarray的属性

type()是函数,dtype是方法,这种细节概念弄清楚,方法是有对象调用的,函数可以传入参数直接用。

import numpy as np

ar = np.array([[1,2,3],[4,5,6]])
print(ar)
print(ar.shape)#返回数组是几行几列的,这个就是两行三列的
print(ar.ndim)#返回数组是几维的,也叫做轴数,几维,轴数就是几。从外往里数,几个中括号就是几维的
print(ar.dtype)#返回元素的类型,这里是int32。(这里重点提一下,dtype是方法,type()是函数)
print(ar.itemsize)#返回元素的大小,占几个字节,这里占4个字节
print(ar.size)#返回这个数组有几个元素

numpy的函数

这几个改变数组形状的函数,切记数量要对得上

array.T

数组转置,就是把几行几列换一下:

array.reshape()

np.resize()

resize()函数跟上面俩不一样,操作对象是np,不是数组,因为它需要传入数组和一个元组(表示形状),然后根据传入的形状和数组一行一行。

数组类型转换

numpy索引及切片

索引切片

一维数组的切片跟列表一样,没区别
二维的切片:

import numpy as np

ar1 = np.arange(10)
ar2 = np.resize(ar1,(3,4))
print(ar2)
print("*"*70)
print("得到第几行的一维数组")
print(ar2[2])#得到的是一个一维的数组,第三行
print(ar2[1:3])#得到的是后两行
print("*"*70)
print("得到第几行的第几个数字")
print(ar2[2][1])#得到的是上一句一维数组里的第三个数
print(ar2[2,1])#第三行的第二个
print("*"*70)
print(ar2[:2,:3])#这个就是把行也切了,列也切了。
print(ar2[:2][:3])#一样的效果
#放一个中括号里面中间就加逗号隔开,也可以写成两个中括号,第一个是行,第二个是列

布尔型索引

感觉不常用,知道有这个东西

就是把全是True和Flase的数组作为索引切片,True就是得到的,Flase就不要了。

随机数,几个常用的方法(重点)


import numpy as np

print(np.random.normal())#生成一个标准正太分布数组
print(np.random.rand(5))#随机生成五个0到1的数组,服从均匀分布
print(np.random.randn(5))#随机生成五个0到1的数组,服从正态分布
print(np.random.randint(3,7,9))#随机生成从3到7的9个int的数组


pandas

series

series的数据结果就是带有标签的一维数组。
创建方法:

  1. 传入一个字典,字典的键key会作为索引,值value作为值
d = {'a':1,'b':2,'c':3,'d':4,'e':5}
s3 = pd.Series(d)
print(s3)
  1. 传入index=列表或者元组作为索引
import numpy as np
import pandas as pd

s1 = pd.Series(np.random.rand(5))
s2 = pd.Series(np.random.rand(5),index=['a','b','c','d','e'])

print(s1[1:4])
print(s2['a':'d'])

np.random.rand(5),随机生成五个范围从0到1的服从均匀分布的数。

可以看到第一个s1切片包头不包尾,没有打印下标为4的键值对;但是看以index为索引来切片包含了末端。
还有一个布尔值作为索引,就是切片的时候把数组传入。

Series的查操作:
Series的head(),tail()方法,head()默认查前五位,括号可以写参数,tail()从后面开始查。

h = s1.head()
print(h)
t = s1.tail(3)
print(t)

value——counts()方法
用来统计每个值的出现的次数,并返回一个新的series。

reindex()
这个方法就是将你原来的Series,按着索引重新排序,不是根据自己定义的索引自己再重新排序。
Series对象的reindex()里面传入一个列表,里面必须是前面series对象的索引,然后根据传入的列表重新排序得到一个新的series。
如果reindex传入的列表多一个索引,值就会得到一个空的,可以再在后面添加个fill_value=0,对值填充。

s1 = s.reindex([2,3,0,1,4],fill_value=0)

Series对象之间相加
与ndrrary不同的是,series会根据标签自动对齐。
因为Series里面单独对标签处理,所以不同的Series对象会根据标签自动相加值,不同的就会直接返回空,而不是会返回原来的那个数;而ndrrary数组因为索引就是下标,都一样,就按着顺序相加。

Series的删除方法:s1 = s.drop('a')
删除这索引是'a'的值和这个索引。

Series的增添方法:就是跟列表一样。直接append

Series的修改方法:根据下标修改,跟字典根据键修改值一样。

DataFrame

DataFrame就是二维的,Series是个一维的,DataFrame可以看作Series组成的字典。DataFrame就相当于一个表格,有行属性和列属性,创建的时候需要传入值,行标签,列标签。
这个传入的值必须是个二维的数组,有着几行几列。
创建方法:

  1. 创建dataframe的时候传入的参数data必须是个二维数组,而且每行之间场长度必须相同。
    传入字典作为参数,字典的key是唯一标识列的,key作为列名,在colunms列标签参数里传入key,可以更改顺序,而index行标签必须跟字典里的列表值数量一样,默认是下标。
import pandas as pd
d = {'a':[1,2,3],'b':[4,5,6],'c':[7,8,9]}
df1 = pd.DataFrame(d,index=['A','B','C'],columns=['a','b','c','d'])
print(df1)
  1. 传入ndrray二维数组作为data必须是几行几列,再写index列表作为行标签,数量跟ndrray几行一样,传入columns作为列标签。
import pandas as pd

n = np.array([[1,2,3],[4,5,6]])
df2 = pd.DataFrame(n,index=['a','b'],columns=['A','B','C'])

print(df2)

  1. 传入Series组成的字典
    因为Series自带的有index,而组成字典,上面说的key作为列标签,所以就不用在自己写了。
    因为Series里面可以index跟对象里面的值数量不一样,空的就是NaN,所以使用Series创建的dataFrame,Series里面的值的数量可以不一样。
    注意一点就是字典里不同的Series对象的index列表里,要是一样就会合并,不一样就另起一行。
import numpy as np
import pandas as pd

d = {"A":pd.Series(np.random.rand(3),index=['a','b','c']),
     "B":pd.Series(np.random.rand(3),index=['a','b','e'])
     }


df1 = pd.DataFrame(d)
print(df1)

这里再介绍一下Dataframe的rename方法:
这个例子就是更改列名,要是行名可以换index,也可以都加
dataframe = dataframe.rename(columns={"a":"A",......})

索引查找

  1. 列索引
    列索引默认[]中括号
    print(df1['A'])
    里面输入列名,不能输入行名,不然会报错,得到的结果是这个列,包含有行标签。
    要是想多显示几列,不能直接在后面加列名,必须使用俩中括号
    prin(df1[['A','B']]),不然会报错。

  2. 行索引
    有俩方法loc[]和iloc[]
    loc[]只能使用行标签作为索引,包尾,使用数字会报错
    iloc[]只能使用数字作为索引,不包尾,使用行标签会报错。

import numpy as np
import pandas as pd

d = {"A":pd.Series(np.random.rand(3),index=['a','b','c']),
     "B":pd.Series(np.random.rand(3),index=['a','b','e'])
     }
df1 = pd.DataFrame(d)

print("这是源表格")
print(df1)
print('\n'*3)


print("这是列索引")
print(df1['A'])
#print(df1['a'])#这样会报错,不能这样进行行索引查找
print(df1[['A','B']])
print('\n'*3)


print("这是行索引,使用loc[]方法")
#不能使用数字作为行索引,会报错,使用行键作为索引包含末端。
print(df1.loc['a'])
print(df1.loc['a':'c'])#包含末端
#print(df1.loc[0:3])报错
print('\n'*3)


print("这是列索引,使用iloc[]方法")
#只能使用数字,不然会报错,而且不包尾。
#print(df1.iloc['a'])
#print(df1.iloc['a':'c'])
print(df1.iloc[1:3])

pandas的时间操作模块

这个暂时先跳过

panads的相关操作

计算时候需要的两个参数

axis(轴,默认是0按着列计算,为1的时候按着行计算),skipna(默认是True,跳过空值统计,False不跳过空值)

import pandas as pd

d = {'A':pd.Series([1,2,3],index=['a','b','c']),
     'B':pd.Series([4,5,6],index=['a','b','c']),
     'C':pd.Series([7,8,9,0],index=['a','c','b','e'])}

df = pd.DataFrame(d)

print(df)
print("计算列'A'的均值")
print(df['A'].mean())#因为已经告知是列了,就不需要向mean方法传入参数了
print("计算每列的均值,axis默认是0,计算列的均值")
print(df.mean())
print("计算行的均值,skipna为False不过滤掉空的值,结果就是空")
print(df.mean(axis=1,skipna=False))

pandas的计算方法

  1. count()计算非Nan值的数量
import pandas as pd

d = {'A':pd.Series([1,2,3],index=['a','b','c']),
     'B':pd.Series([4,5,6],index=['a','b','c']),
     'C':pd.Series([7,8,9,0],index=['a','c','b','e'])}

df = pd.DataFrame(d)

print("原表格是这样的")
print(df)

print("count()计算非空值的数量\n里面还是需要传入axis轴的参数表明是行还是列")
print(df.count(axis=1))#默认为0,列,这里写1,统计行。

  1. min(),max()找最大值和最小值
print("max()和min()根据传入的axis值来统计行或者列的最大最小值")
print("统计每列的最小值")
print(df.min())

print("统计每行的最大值")
print(df.max(axis=1))

  1. quantile()统计分位数,需要传入一个参数确定位置

  2. .std(),.var()分别求标准差,方差

print("求方差")
print(df.std(axis=1))

print("求标准差")
print(df.var(axis=1))
  1. .skew()样本的偏度、.kurt()样本的峰度
print("求偏度")
print(df.skew(axis=1))

print("求峰度")
print(df.kurt(axis=1))

unique()返回只有去掉重复值的数组(ndrray)

import pandas as pd

s = pd.Series(list('agsrgrgs'))
print(s,'\n',"列表里面的字符串元素作为值构成一个Series对象")

u = s.unique()#unique是pd的内置方法,返回一个数组
print(u)>>>['a' 'g' 's' 'r']
print(type(u))>>><class 'numpy.ndarray'>

Value_counts()

这个函数就是对Series重复的值统计个数,最后返回的还是一个新的Series,下标就是那些被统计的元素,值就是个数。

就暂时了解这些,还有许多更详细的看链接:
panads资料链接

numpy和panads数据分析练手链接:
链接

matplotlib

#导入模块
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-10,10,20)
y1 = 2*x+1#得到的都是数组对象
y2 = x**2

#定义图像窗口
plt.figure('画布名称',figsize=(9,7))#设置画布的名字和大小,也可以添加facecolor颜色参数
#画图
plt.plot(x,y1,linestyle='--')
plt.plot(x,y2,color='r',linewidth=1)#把上面两个数组按着x,y画出来

#定义坐标轴名称及范围
plt.xlim(-10,10)
plt.ylim(-10,10)

#设置x轴,y轴的名称
plt.xlabel("This is x")
plt.ylabel("This is y")

#显示图像
plt.show()

#plt.xticks(),使用这个方法可以改变刻度名称



pillow

这是个图像操作的库

  1. 创建图像image对象
    打开图像还是用open这个句子,暂时先不用with语句,还有panads打开CSV文件的时候最好还是直接用open语句,with语句适用那些有close的。

  2. image对象的属性

print("图像的尺寸")
w,h = im.size

print(im.size)
print(type(im.size))#返回的是一个元组
print(w,h)#得到图片的长度和宽度,单位是像素
print(type(w))

print('\n'+"图像的格式")
print(im.format)#得到的是PNG格式的

print('\n'+"图像是否是只读的"+'\n'+"返回0(不是)或者1(是)")
print(im.readonly)

print('\n'+"查看图像相关信息,许多信息")
print(im.info)#这里返回的是一个字典,太多了,先换个方式显示
#这个字典只有两个键,一个对应的是分辨率,一个对应不知道的一大堆东西

print('\n'+"查看图像的模式")
print(im.mode)#得到的是RGB,三通道,还有的可能是RGBA四通道,多一个透明通道

  1. 图像格式的转换
    save(),保存为其他的格式,需要传入俩参数,一个是需要保存的路径,一个是要保存的格式,png或者jpg。
im.save('路径','格式')

这样可以实现图像的格式转换和另存为。

convert()
由于图片的模式可以不一样,比如四通道的转换成三通道JPG就不能直接用save()来转,所以就需要用到convert()先转一下模式,再save保存。

im2 = im1.convert("RGB")
im2.save()

pillow库还有很多东西,具体的学习点链接

requests

re.findall(),返回的是列表。

前面语已经学过内置的urllib模块里面的request模块,还有一个requests这个第三方模块,这个模块更厉害,用起来也更方便。
requests可以直接通过get方法来直接获取网页

chardet

编码的

psutil

主要是获取代电脑CPU,内存,网络状态等信息的

Seaborn

Facetgrid方法

把数据集当中很多的子集展示,用这个函数

BeautifulSoup4库

BeauSouped4可以将复杂的HTML文档转换成复杂的树形结构:

  1. Tag:网页的标签及其内容,但只能获取到匹配的第一个标签;
  2. NavigableString:标签的内容(即字符串);
  3. BeautifulSoup:表示文档本身,会直接打印输出HTML源码;
  4. Comment:表示注释里面的内容
    举例,有这样一个HTML源码:
<!DOUCTYPE html>
<html lang="en">
<head>
     <meta charset="UTF-8">
     <title>标题</title>
</head>
<body>
     <div>
          <span><!-- 这是注释 --></span>
          <a href="https://www.bilibili.com" name="bilibili">这是指向哔哩哔哩的链接</a>
          <a href="http://huanc.love/" name="huanc">这是指向自己网站的链接</a>
     </div>
</body>
</html>

Python测试

from bs4 import BeautifulSoup

file = open("./test.html","rb")
html = file.read()
bs = BeautifulSoup(html,"html.parser")

print(type(bs))
# >>><class 'bs4.BeautifulSoup'>,是一个封装bs4.BeautifulSoup的对象
print(bs)

print(type(bs.a))
# >>><class 'bs4.element.Tag'>,是一个标签对象
print(bs.a)
# >>>直接打印a标签的全部内容,但只能获取到一个

print(type(bs.a.string))
# >>><class 'bs4.element.NavigableString'>,NavigableString的对象
print(bs.a.string)
# 直接打印标签a里面的内容

print(type(bs.span))# >>> <class 'bs4.element.Tag'>,这里还是tag对象,不是注释comment对象
print(type(bs.span.string))# >>> <class 'bs4.element.Comment'>,这里才是Comment对象
print(bs.span.string)# 这里才会打印注释内容。
# 所以注意一下,带有string的标签对象,一般都是NavigableString对象,
# 但属于注释的标签对象带string,仍然是Comment对象。

print(bs.div.contents)
# 会返回一个列表,列表里面都是,各个标签元素和换行字符。

标签:index,进阶,Python,Series,数组,np,pd,print
From: https://www.cnblogs.com/huanc/p/17441381.html

相关文章

  • 16 个必知必会的 Python 教程!
    1.三元运算符三元运算符是if-else语句的简写。语法是value_if_trueifconditionelsevalue_if_false。三元运算符是一行代码,可以替代多行if-else语句,使你的代码更加简洁。1a=52b=103max=aifa>belseb#value_if_trueifconditionelsevalue_if_fal......
  • Python进阶三
    进程和线程一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程;在一个进程内部,要同时干多件事,就需要同时运行多个“子任务”,把进程内的这些“子任务”称为线程(Thread),比如Word,它可以同时进行打字、拼写检查、打印等事情。......
  • Python进阶七
    访问数据库importsqlite3#连接一个数据库,要是没有就会自己创建一个conn=sqlite3.connect("MySQL.db")#创建一个游标,用于执行SQL语句cursor=conn.cursor()##创建表创建表的一般结构就是:createtable<表名>(<属性名字类型>,......);#或者也可以把要执行的语......
  • python中测试方法所用的时间—timeit
    方法代码使用timeit方法测试两个函数的运行速度importtimeitstrlist=['Thisisalongstringthatwillnitkeepinmemory.'forninrange(10000)]defuse_join():#使用字符串的join方法连接多个字符串return''.join(strlist)defues_plus():#使用运算符+连接多个字......
  • python使用hTTP方法
    Python中可以使用requests库来发送HTTP请求,其中包括GET、POST、PUT、DELETE等方法。下面是一个使用requests库发送HTTP请求的示例:importrequests#发送GET请求response=requests.get('ExampleDomain')#发送POST请求data={'key1':'value1','key2':'val......
  • python 实现google authenticator 认证
    importosimporttracebackimportpyotpfromqrcodeimportQRCode,constantsclassGoogleAuthenticatorClient:def__init__(self,secret_key=None):self.secret_key=secret_keydefcreate_secret(self):"""生......
  • python 读取、写入、追加、覆盖xls文件
    python读取、写入、追加、覆盖xls文件0、写在前面测试源xls是这样的1、读取xlsdefread_xls(filename:str,sheet_name:str)->List[list]:filename=os.path.abspath(filename)assertos.path.isfile(filename),f'{filename}isnotfile'assertfilen......
  • Python使用to_csv导出文件时参数注意事项
    使用to_csv导出文件时,一定要指定index参数和encoding参数这两个参数;index参数:默认为True,会添加一列标记数据索引。encoding参数:如果不指定utf_8_sig,使用默认参数值,则导出的文件可能会有乱码或串列。cake_data.to_csv(r"C:\E\data.csv",index=False,encoding='utf_8_sig')......
  • Python中的Union这个类的使用
    在Python中,Union是typing模块中定义的一个类,用于表示多个类型中的任意一种类型。Union类型可以用于表示参数或函数返回值等多种情况下可能的不同类型。具体而言,Union类型可以使用typing.Union[type1,type2,...]的语法来定义,其中type1、type2等参数为可能的类型。例......
  • Python——基于数据挖掘的上市公司财务造假识别(制造业)
    制造业importpandasaspdimportnumpyasnp%matplotlibinlineimportmatplotlib.pyplotaspltimportseabornassnscolor=sns.color_palette()fromscipyimportstatsfromscipy.statsimportnorm,skewt1=pd.read_csv("制造业.csv")t1_train=t1.d......