找回密码
 立即注册
首页 业界区 业界 有用的包 #Python

有用的包 #Python

茅断卉 9 小时前
整理一点有用的包,持续更新中~
pandas

数据处理神器,一维、二维数据,安装命令pip install pandas
读取文件
  1. import pandas as pd
  2. df = pd.read_csv("data.csv")          # 读取 CSV 文件
  3. df = pd.read_excel("data.xlsx")      # 读取 Excel 文件(默认第一张表)
  4. df = pd.read_json("data.json")       # 读取 JSON 文件
  5. df = pd.read_sql(sql, conn)         # 从数据库读取(需要已有连接 conn)
复制代码
写文件
  1. import pandas as pd
  2. df.to_csv("out.csv", index=False)     # 保存为 CSV,不保存行索引
  3. df.to_excel("out.xlsx", index=False)  # 保存为 Excel
  4. df.to_json("out.json", orient="records", force_ascii=False)  # 保存为 JSON,支持中文
复制代码
查看数据
  1. import pandas as pd
  2. df.head(5)        # 查看前 5 行,默认 head() 是前 5 行
  3. df.tail(5)        # 查看后 5 行
  4. df.shape          # (行数, 列数)
  5. df.columns        # 列名索引
  6. df.dtypes         # 每一列的数据类型
  7. df.info()         # 表结构概览(行数、列数、缺失值、类型等)
  8. df.describe()     # 数值列的基本统计信息(均值、标准差、分位数等)
复制代码
索引与切片
  1. import pandas as pd
  2. df["col"]                 # 选一列,返回 Series
  3. df[["col1", "col2"]]      # 选多列,返回 DataFrame
  4. df.iloc[0]                # 第 0 行
  5. df.iloc[0:5]              # 第 0~4 行
  6. df.iloc[:, 0:3]           # 所有行,第 0~2 列
  7. df.iloc[0:5, 1:3]         # 第 0~4 行,第 1~2 列
  8. df.loc[0]                       # index 为 0 的那一行
  9. df.loc[0:10, ["col1", "col2"]]  # index 0~10 行,列为 col1、col2
  10. df.loc[df["age"] > 30, :]       # 条件筛选:age > 30 的所有列
复制代码
修改列
  1. import pandas as pd
  2. df["gender"] = df["gender"].replace({"M": "男", "F": "女"}) # 替换某一列值
复制代码
缺失值处理
  1. import pandas as pd
  2. df.isna()                 # 返回布尔表,标记是否为缺失
  3. df.isna().sum()           # 每一列缺失值数量
  4. df.dropna()               # 删除包含缺失值的行
  5. df.dropna(subset=["col"]) # 仅根据某一列判断是否删除行
  6. df.fillna(0)              # 把缺失值填成 0
  7. df["col"].fillna(df["col"].mean(), inplace=True)  # 用该列均值填充
复制代码
去重/排序
  1. import pandas as pd
  2. df.drop_duplicates()                      # 删除完全相同的重复行
  3. df.drop_duplicates(subset=["uid"])        # 按某几列去重
  4. df.sort_values("age")                     # 按 age 升序排序
  5. df.sort_values("age", ascending=False)    # 按 age 降序
  6. df.sort_values(["age", "score"], ascending=[True, False])  # 多列排序
复制代码
重命名/重置索引
  1. import pandas as pd
  2. df.rename(columns={"old_name": "new_name"}, inplace=True)  # 改列名
  3. df.reset_index(drop=True, inplace=True)    # 重置索引,丢掉旧索引
  4. df.set_index("唯一病案标识", inplace=True)  # 把某列设为行索引
复制代码
字符串处理
  1. import pandas as pd
  2. df["name"].str.lower()           # 全小写
  3. df["name"].str.upper()           # 全大写
  4. df["name"].str.strip()           # 去掉首尾空格
  5. df["name"].str.contains("心梗")  # 判断是否包含子串
  6. # 分割字符串到多列
  7. df["full"].str.split("-", expand=True)
复制代码
时间日期处理
  1. import pandas as pd
  2. df["date"] = pd.to_datetime(df["date"])         # 字符串转时间类型
  3. df["year"] = df["date"].dt.year                 # 年
  4. df["month"] = df["date"].dt.month               # 月
  5. df["day"] = df["date"].dt.day                   # 日
  6. df.set_index("date", inplace=True)              # 把日期设为索引
  7. df.resample("D").sum()                          # 按天重采样
  8. df.resample("M").mean()                         # 按月求平均
复制代码
pdfminer.six

可以从pdf中提取纯文本,安装命令pip install pdfminer.six
pdfminer.six:更底层,能拿到 更详细的布局和字体信息。配置稍微复杂一点,但更灵活。
PyPDF2:偏向于拆分/合并/旋转 PDF 文件,文本提取较简单
pdfplumber:基于 pdfminer.six 封装的更好用的高级库,特别适合提表格
提取pdf中的文字
  1. from pdfminer.high_level import extract_text
  2. text = extract_text("example.pdf")   # 返回整个 PDF 的文本字符串
  3. text = extract_text(
  4.     "example.pdf",
  5.     page_numbers=[0, 1],   # 指定页码(从 0 开始)
  6.     maxpages=2,            # 最多读取多少页
  7.     password="",           # 有密码的 PDF 时用
  8. )
复制代码
按页面布局,拿到布局结构
  1. from pdfminer.high_level import extract_pages
  2. from pdfminer.layout import LTTextContainer
  3. for page_layout in extract_pages("example.pdf"):
  4.     for element in page_layout:
  5.         if isinstance(element, LTTextContainer):
  6.             print(element.get_text())
复制代码
tqdm (taq dum)

能给循环体加进度条,显示进度,安装命令pip install tqdm
直接将迭代器传入tqdm()
  1. from tqdm import tqdm, trange
  2. import time
  3. # 方式1:tqdm 包装任意迭代器
  4. for i in tqdm(range(100), desc="基础进度条"):
  5.     time.sleep(0.05)  # 模拟耗时操作
  6. for index, row in tqdm(data.iterator(), desc="遍历数据", total=len(data)):
  7.     # 你的业务逻辑(如数据处理、模型训练等)
  8.     pass
  9. # 方式2:trange(简化版,仅针对 range,trange() 是 tqdm(range()) 的简写)
  10. for i in trange(100, desc="简化版进度条"):
  11.     time.sleep(0.05)
复制代码
手动控制进度条
  1. # 初始化进度条(total 设定总步数)
  2. pbar = tqdm(total=100, desc="手动控制")
  3. for i in range(100):
  4.     time.sleep(0.05)
  5.     pbar.update(1)  # 每次更新1步(可自定义步数,如 update(2))
  6. pbar.close()  # 必须关闭,释放资源
复制代码
自定义进度条样式
  1. for i in tqdm(
  2.     range(100),
  3.     desc="自定义样式",
  4.     leave=False,
  5.     unit="样本",
  6.     unit_scale=True,
  7.     colour="blue",
  8.     ncols=80
  9. ):
  10.     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)嵌套进度条
  1. # 外层进度条(position=0)
  2. for i in tqdm(range(5), desc="外层循环", position=0):
  3.     # 内层进度条(position=1,leave=False 避免残留)
  4.     for j in tqdm(range(10), desc="内层循环", position=1, leave=False):
  5.         time.sleep(0.1)
复制代码
jupyter notebook环境
  1. from tqdm.notebook import tqdm, trange
  2. for i in trange(100, desc="Jupyter 进度条"):
  3.     time.sleep(0.05)
复制代码
动态更新描述
  1. pbar = tqdm(range(100), desc="动态更新")
  2. for i in pbar:
  3.     time.sleep(0.05)
  4.     # 更新左侧描述
  5.     pbar.set_description(f"当前步数: {i+1}")
  6.     # 更新右侧后缀(支持字典,自动格式化)
  7.     pbar.set_postfix(
  8.         进度=f"{(i+1)/100:.2%}",
  9.         速度=f"{1/0.05:.1f}it/s",
  10.         剩余=f"{(100-i-1)*0.05:.1f}s"
  11.     )
  12. pbar.close()
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册