茅断卉 发表于 6 天前

有用的包 #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()
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

葛雅隽 发表于 6 天前

用心讨论,共获提升!

挠溃症 发表于 4 天前

热心回复!

拓炊羡 发表于 前天 05:05

yyds。多谢分享
页: [1]
查看完整版本: 有用的包 #Python