博客 / 詳情

返回

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

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.