整理一点有用的包,持续更新中~
pandas
数据处理神器,一维、二维数据,安装命令pip install pandas
读取文件- import pandas as pd
- df = pd.read_csv("data.csv") # 读取 CSV 文件
- df = pd.read_excel("data.xlsx") # 读取 Excel 文件(默认第一张表)
- df = pd.read_json("data.json") # 读取 JSON 文件
- df = pd.read_sql(sql, conn) # 从数据库读取(需要已有连接 conn)
复制代码 写文件- import pandas as pd
- df.to_csv("out.csv", index=False) # 保存为 CSV,不保存行索引
- df.to_excel("out.xlsx", index=False) # 保存为 Excel
- df.to_json("out.json", orient="records", force_ascii=False) # 保存为 JSON,支持中文
复制代码 查看数据- import pandas as pd
- df.head(5) # 查看前 5 行,默认 head() 是前 5 行
- df.tail(5) # 查看后 5 行
- df.shape # (行数, 列数)
- df.columns # 列名索引
- df.dtypes # 每一列的数据类型
- df.info() # 表结构概览(行数、列数、缺失值、类型等)
- df.describe() # 数值列的基本统计信息(均值、标准差、分位数等)
复制代码 索引与切片- import pandas as pd
- df["col"] # 选一列,返回 Series
- df[["col1", "col2"]] # 选多列,返回 DataFrame
- df.iloc[0] # 第 0 行
- df.iloc[0:5] # 第 0~4 行
- df.iloc[:, 0:3] # 所有行,第 0~2 列
- df.iloc[0:5, 1:3] # 第 0~4 行,第 1~2 列
- df.loc[0] # index 为 0 的那一行
- df.loc[0:10, ["col1", "col2"]] # index 0~10 行,列为 col1、col2
- df.loc[df["age"] > 30, :] # 条件筛选:age > 30 的所有列
复制代码 修改列- import pandas as pd
- df["gender"] = df["gender"].replace({"M": "男", "F": "女"}) # 替换某一列值
复制代码 缺失值处理- import pandas as pd
- df.isna() # 返回布尔表,标记是否为缺失
- df.isna().sum() # 每一列缺失值数量
- df.dropna() # 删除包含缺失值的行
- df.dropna(subset=["col"]) # 仅根据某一列判断是否删除行
- df.fillna(0) # 把缺失值填成 0
- df["col"].fillna(df["col"].mean(), inplace=True) # 用该列均值填充
复制代码 去重/排序- import pandas as pd
- df.drop_duplicates() # 删除完全相同的重复行
- df.drop_duplicates(subset=["uid"]) # 按某几列去重
- df.sort_values("age") # 按 age 升序排序
- df.sort_values("age", ascending=False) # 按 age 降序
- df.sort_values(["age", "score"], ascending=[True, False]) # 多列排序
复制代码 重命名/重置索引- import pandas as pd
- df.rename(columns={"old_name": "new_name"}, inplace=True) # 改列名
- df.reset_index(drop=True, inplace=True) # 重置索引,丢掉旧索引
- df.set_index("唯一病案标识", inplace=True) # 把某列设为行索引
复制代码 字符串处理- import pandas as pd
- df["name"].str.lower() # 全小写
- df["name"].str.upper() # 全大写
- df["name"].str.strip() # 去掉首尾空格
- df["name"].str.contains("心梗") # 判断是否包含子串
- # 分割字符串到多列
- df["full"].str.split("-", expand=True)
复制代码 时间日期处理- import pandas as pd
- df["date"] = pd.to_datetime(df["date"]) # 字符串转时间类型
- df["year"] = df["date"].dt.year # 年
- df["month"] = df["date"].dt.month # 月
- df["day"] = df["date"].dt.day # 日
- df.set_index("date", inplace=True) # 把日期设为索引
- df.resample("D").sum() # 按天重采样
- df.resample("M").mean() # 按月求平均
复制代码 pdfminer.six
可以从pdf中提取纯文本,安装命令pip install pdfminer.six
pdfminer.six:更底层,能拿到 更详细的布局和字体信息。配置稍微复杂一点,但更灵活。
PyPDF2:偏向于拆分/合并/旋转 PDF 文件,文本提取较简单
pdfplumber:基于 pdfminer.six 封装的更好用的高级库,特别适合提表格
提取pdf中的文字- from pdfminer.high_level import extract_text
- text = extract_text("example.pdf") # 返回整个 PDF 的文本字符串
- text = extract_text(
- "example.pdf",
- page_numbers=[0, 1], # 指定页码(从 0 开始)
- maxpages=2, # 最多读取多少页
- password="", # 有密码的 PDF 时用
- )
复制代码 按页面布局,拿到布局结构- from pdfminer.high_level import extract_pages
- from pdfminer.layout import LTTextContainer
- for page_layout in extract_pages("example.pdf"):
- for element in page_layout:
- if isinstance(element, LTTextContainer):
- print(element.get_text())
复制代码 tqdm (taq dum)
能给循环体加进度条,显示进度,安装命令pip install tqdm
直接将迭代器传入tqdm()- from tqdm import tqdm, trange
- import time
- # 方式1:tqdm 包装任意迭代器
- for i in tqdm(range(100), desc="基础进度条"):
- time.sleep(0.05) # 模拟耗时操作
- for index, row in tqdm(data.iterator(), desc="遍历数据", total=len(data)):
- # 你的业务逻辑(如数据处理、模型训练等)
- pass
- # 方式2:trange(简化版,仅针对 range,trange() 是 tqdm(range()) 的简写)
- for i in trange(100, desc="简化版进度条"):
- time.sleep(0.05)
复制代码 手动控制进度条- # 初始化进度条(total 设定总步数)
- pbar = tqdm(total=100, desc="手动控制")
- for i in range(100):
- time.sleep(0.05)
- pbar.update(1) # 每次更新1步(可自定义步数,如 update(2))
- pbar.close() # 必须关闭,释放资源
复制代码 自定义进度条样式- for i in tqdm(
- range(100),
- desc="自定义样式",
- leave=False,
- unit="样本",
- unit_scale=True,
- colour="blue",
- ncols=80
- ):
- time.sleep(0.05)
复制代码 参数作用desc进度条左侧描述文本(如 desc="处理数据")leave进度条完成后是否保留(默认 True,设为 False 完成后清空)total总迭代次数(默认自动识别迭代器长度)unit迭代单位(默认 it,如 unit="文件" unit="样本")unit_scale自动缩放单位(如 1000it → 1kit,默认 False)colour/color进度条颜色(支持英文/十六进制,如 colour="green" colour="#FF5733")ncols进度条宽度(整数,0 为自动适配终端)disable禁用进度条(调试/后台运行时用,默认 False)position多进度条时的位置(避免重叠,如 position=0 position=1)嵌套进度条- # 外层进度条(position=0)
- for i in tqdm(range(5), desc="外层循环", position=0):
- # 内层进度条(position=1,leave=False 避免残留)
- for j in tqdm(range(10), desc="内层循环", position=1, leave=False):
- time.sleep(0.1)
复制代码 jupyter notebook环境- from tqdm.notebook import tqdm, trange
- for i in trange(100, desc="Jupyter 进度条"):
- time.sleep(0.05)
复制代码 动态更新描述- pbar = tqdm(range(100), desc="动态更新")
- for i in pbar:
- time.sleep(0.05)
- # 更新左侧描述
- pbar.set_description(f"当前步数: {i+1}")
- # 更新右侧后缀(支持字典,自动格式化)
- pbar.set_postfix(
- 进度=f"{(i+1)/100:.2%}",
- 速度=f"{1/0.05:.1f}it/s",
- 剩余=f"{(100-i-1)*0.05:.1f}s"
- )
- pbar.close()
复制代码 来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |