文章目录
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()