有用的包 #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]                # 第 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())

posted @ 2025-11-25 21:19  猫猫不会吃芋头  阅读(0)  评论(0)    收藏  举报