Python编程——常用第三方模块

numpy

Numerical Python

安装

pip install numpy

Ndarray

用于存放同类型元素的多维数组,每个元素在内存中都有相同存储大小的区域

numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)   
object  数组或嵌套的数列
dtype   数组元素的数据类型,可选
copy    对象是否需要复制,可选
order   创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)
subok   默认返回一个与基类类型一致的数组
ndmin   指定生成数组的最小维度

创建ndarray

import numpy as np
# 使用列表创建  
np.array([1,2,3]) # 创建一维数组
np.array([1,2],[3,4]) # 创建二维数组
​
# 使用routines函数创建
np.ones(shape, dtype=None, order='C') # 0填充
np.ones(shape=10)
np.ones(shape=[2,3])
np.zeros(shape, dtype=None, order='C') # 1填充
np.full(shape, fill_value, dtype=None, order='C') # 用fill_value填充  
np.eye(N, M=N, k=0, dtype=float) # 返回二维对角矩阵(N,M),对角线为1,k为对角线的下标,默认为0表示的是主对角线,负数表示的是低对角,正数表示的是高对角
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) # 创建等差数列,num为生成样本的数量,endpoint关键字指定是否包括终值
np.arange(start, stop, step = 5, dtype=None) # 通过指定(开始值,终值,步长)来创建一维数组,不包括终值
​
https://www.runoob.com/numpy/numpy-dtype.html
https://www.jianshu.com/p/ddb9c280666e

pandas

导入

import numpy as np
import pandas as pd

数据结构

Series

带标签的一维同构数组

s = pd.Series(data, index=index) # 创建Series index为轴标签索引,默认为数值索引(从0开始),长度需要与data长度一致
s = pd.Series(dict) # 使用字典实例化,默认key作为轴标签索引,索引顺序=字典插入顺序
​
# 操作类似ndarray,支持大多数numpy函数,支持索引切片
s.index
s.values
s.dtype
s.name
s.index.name

DataFrame

带标签的,大小可变的,二维异构表格

# 使用Series字典生成DataFrame
d = {'one': pd.Series([1., 2., 3.], index=['a', 'b', 'c']),
     'two': pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d) # 可以指定index和columns,默认key为column
​
# 使用List字典、多维数组生成DataFrame
d = {'one': [1., 2., 3., 4.],'two': [4., 3., 2., 1.]}
d = np.zeros((2, ), dtype=[('A', 'i4'), ('B', 'f4'), ('C', 'a10')])
df = pd.DataFrame(d) # index默认为数值索引
​
# 使用dict列表生成DataFrame
d = [{'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(d) # index默认为数值索引,columns为key
​
# 使用tuple列表DataFrame
d = [(1,1),(2,2),(3,3)]
df = pd.DataFrame(d) # index和columns默认为数值索引
​
# 生成日期时间索引的DataFrame
dates = pd.date_range('20130101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
​
# 删除
del df['columns']
columns = df.pop('columns')
​
# 插入
df['columns'] = 'columns' # 广播填充列
df['one_trunc'] = df['one'][:2] # 插入Series
df.insert(1, 'bar', df['one']) # (插入列,列名,Series) 默认为尾部插入
df['flag'] = df['columns'] > 2
​
# 数据对齐和运算
df = df1 + df2 # 列、行标签并集
df - df.iloc[0] # 列对齐Series索引
df1 & df2 # 支持布尔运算
df.T # 转置
​
# 查看信息摘要
df.info()
df.describe() # 统计信息(包括四分位数:从小到大排序,3个分割点位置的值)
​
# 输出为numpy对象
df.to_numpy()
​
# 数据转换类型
df['columns'] = df['columns'].astype('int')
​
# 修改列名
df.rename(columns={'old':'new'},inplace=True)
​
# 设置index为时间类型
df.set_index('time_colunm',inplace=True)
​
# 按天切分DataFrame
DFList = [group[1] for group in df.groupby([df.index.month,df.index.day])]
​
# 转化某一列
df['column'] = df['column'].apply(lambda x:int(x))

查看数据

# 查看头尾数据
df.head()
df.tail(5)
​
# 查看索引和列名
df.index
df.columns
​
# 查看数据类型
df.dtypes
​
# 查看数据统计摘要
df.describe()
​
# 按列标签排序
df.sort_index(asix=1,ascending=False)
​
# 按列值排序
df.sort_values(by='B')
​
# 获取列 -> Series
df['columns'] 
​
# 切片行 -> DataFrame
df[5:10]
df['20130102':'20130104']
​
# 按标签选择
df.loc['label'] # 选择行
df.loc[:, ['A', 'B']] # 选择列
df.at['label', 'A'] # 快速访问标量
df.loc[df['label']=='A',['展示列']] # 查找特定值
​
# 按位置选择
df.iloc[loc] # 用整数位置选择行
df.iloc[3:5, 0:2] # 整数切片
df.iloc[[1, 2, 4], [0, 2]] # 位置切片
df.iat[1,1] # 快速访问标量
​
# 布尔索引
df.列名 # 像属性一样访问列
df[df.A > 0]
df[df['E'].isin(['one','two'])] # isin()筛选
​
# 缺失值 使用np.nan表示
df.dropna(how='any') # 删除所有缺失值的行
df.fillna(value=5) # 填充缺失值
pd.isna(df) # 缺失值布尔掩码
​
# 统计(默认排除缺失值)
df.mean() # 求列均值
df.mean(1) # 求行均值
s.value_counts()
​
# 遍历
for index, row in d.iterrows()

合并与分组

# 结合 Concat
pieces = [df[:3], df[3:7], df[7:]]
pd.concat(pieces)
​
# 连接 Join
pd.merge(left, right, on='key')
​
# 追加 Append
df.append(s, ignore_index=True) # 在末尾追加行Series
​
# 分组求和
df.groupby('A').sum()
df.groupby(['A', 'B']).sum() # 多层索引

可视化

# 需要安装matplotlib
ts = pd.Series(np.random.randn(1000), index=pd.date_range("1/1/2000", periods=1000))
ts = ts.cumsum()
ts.plot() # 快速绘制带标签的列

数据输入/输出

# CSV
df.to_csv('df.csv')
pd.read_csv('df.csv')
​
# Excel
df.to_excel('df.xlsx', sheet_name='Sheet1')
pd.read_excel('df.xlsx', 'Sheet1', index_col=None, na_values=['NA'])
​
# dict
df.to_dict(orient) # orient:构造方式

requests

import requests
​
# GET请求
r = requests.get('url', headers={}, params={}, cookies={}, timeout=2.5) 
​
# POST请求
r = requests.post('url', headers={}, data={}, json={}) # 传入dict自动序列化为JSON
# POST请求默认使用application/x-www-form-urlencoded对POST数据编码
​
# 上传文件
upload_files = {'file': open('report.xls', 'rb')}
r = requests.post(url, files=upload_files)
​
# 获取响应信息
r.status_code
r.text
r.encoding
r.content # 获取响应的bytes对象
r.json() # 对于json响应可以直接获取
r.headers
r.cookies
requests.utils.dict_from_cookiejar(r.cookies) # 读取cookie到dict
​
# 会话维持
sess = requests.Session()
r = sess.post(url,headers=header,data=data)

kafka

消费者

from kafka imoort KafkaConsumer
# x
consumer = KafkaConsumer('topic_name',group_id='xxx',bootstrap_servers[localhost:9092])
for msg in consumer:
    print(msg.topic, msg.partition, msg.offset, msg.key, msg.value)

jupyter

开启远程访问

1.设置Jupyter密码

jupyter notebook password

2.创建并修改配置文件

jupyter notebook --generate-config
vim /root/.jupyter/jupyter_notebook_config.py
c.NotebookApp.ip='*'

3.防火墙开放端口

4.启动

jupyter notebook --allow-root

配置Kernel

查看当前内核

import sys
sys.executable

查看配置文件路径

ipython kernelspec list

修改配置文件kernel.json第三行

解决matplotlib.pyplot不显示图像

# 代码首行
%matplotlib notebook

tqdm

Tqdm 是一个快速,可扩展的Python进度条,可以在 Python 长循环中添加一个进度提示信息,用户只需要封装任意的迭代器tqdm(iterator)

from tqdm import tqdm
for i in tqdm(range(1000)):
    #do something
    pass

chardet

检测编码

import chardet
chardet.detect(b'Hello, world!')
# {'encoding': 'ascii', 'confidence': 1.0, 'language': ''}

psutil

process and system utilities

实现系统监控,可跨平台使用

import psutil
​
# CPU信息
psutil.cpu_count() # 计算机的核数
psutil.cpu_count(logical=False) # CPU物理核心,计算机上实际配置的CPU个数
psutil.cpu_times()
psutil.cpu_percent(interval=1, percpu=True) # 计算cpu使用率的时间间隔,选择总的使用率还是每个cpu的使用率
​
# 内存信息
psutil.virtual_memory() # 物理内存信息
psutil.swap_memory() # 交换内存信息
​
# 磁盘信息
psutil.disk_partitions() # 磁盘分区信息
psutil.disk_usage('C:\\') # 磁盘使用情况
psutil.disk_io_counters() # 磁盘IO
​
# 网络信息
psutil.net_io_counters() # 获取网络读写字节/包的个数
psutil.net_if_addrs() # 获取网络接口信息
psutil.net_if_stats() # 获取网络接口状态
psutil.net_connections() # 当前网络信息
​
# 进程信息
psutil.pids() # 所有进程ID
p = psutil.Process(0) # 获取指定进程ID
p.name() # 进程名称
p.exe() # 进程exe路径
p.cwd() # 进程工作目录
p.cmdline() # 进程启动的命令行
p.ppid() # 父进程ID
p.parent() # 父进程
p.children() # 子进程列表
p.status() # 进程状态
p.username() # 进程用户名
p.create_time() # 进程创建时间
p.terminal() # 进程终端
p.cpu_times() # 进程使用的CPU时间
p.memory_info() # 进程使用的内存
p.open_files() # 进程打开的文件
p.connections() # 进程相关网络连接
p.num_threads() # 进程的线程数量
p.threads() # 所有线程信息
p.environ() # 进程环境变量
p.terminate() # 结束进程
psutil.test() # ps命令

ConfigParser

configparser模块简介 – Hello_Jack – 博客园 (cnblogs.com)

用来读取配置文件的包

配置文件格式

[DEFAULT]
ServerAliveInterval = 45
Compression = yes
CompressionLevel = 9
ForwardX11 = yes
  
[bitbucket.org]
User = Atlan
  
[topsecret.server.com]
Port = 50022
ForwardX11 = no

codecs

用于在不同数据之间转换文本的编码器和解码器

codecs — Codec registry and base classes — Python 3.9.5 documentation

使用codecs读写文件

import codecs
file = codecs.open('test.txt','r','utf-8')
file.close()
​
file = codecs.write('test.txt','w','utf-8')
file.write('content')
file.close()

发表评论