有用的包 #Python
整理一点有用的包,持续更新中~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 行
df.iloc # 第 0~4 行
df.iloc[:, 0:3] # 所有行,第 0~2 列
df.iloc # 第 0~4 行,第 1~2 列
df.loc # index 为 0 的那一行
df.loc]# index 0~10 行,列为 col1、col2
df.loc > 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=)# 多列排序重命名/重置索引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 开始)
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()
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! 用心讨论,共获提升! 热心回复! yyds。多谢分享
页:
[1]