装 Pandas

pip install pandas

DataFrame:Excel 表格

import pandas as pd

df = pd.DataFrame({
    "name": ["Alice", "Bob", "Carol"],
    "age": [30, 25, 35],
    "city": ["北京", "上海", "深圳"],
})

print(df)
#     name  age city
# 0  Alice   30   北京
# 1    Bob   25   上海
# 2  Carol   35   深圳

Series:单列

DataFrame 的每一列就是一个 Series:

df["age"]            # 取列
df.age               # 同上(属性写法)
type(df["age"])      # <class 'pandas.Series'>

读 / 写文件

# CSV
df = pd.read_csv("data.csv")
df.to_csv("out.csv", index=False)

# Excel(需要 pip install openpyxl)
df = pd.read_excel("data.xlsx", sheet_name="Sheet1")
df.to_excel("out.xlsx", index=False)

# JSON
df = pd.read_json("data.json")

# Parquet(大数据高效格式)
df = pd.read_parquet("data.parquet")

基本探索

df.head()            # 前 5 行
df.tail(3)           # 后 3 行
df.shape             # (行数, 列数)
df.dtypes            # 各列类型
df.info()            # 总览
df.describe()        # 数值列的统计摘要
df.columns           # 列名

选择数据

# 单列
df["age"]

# 多列
df[["name", "age"]]

# 按条件过滤
df[df["age"] > 28]
df[(df["age"] > 28) & (df["city"] == "深圳")]    # & 不是 and

# 按标签 / 位置
df.loc[0]                # 第 0 行(按标签)
df.iloc[0]               # 第 0 行(按位置)
df.loc[0:2, "name"]      # 前 3 行的 name 列

⚠️ 多条件用 & |,不是 and or,并且每个条件必须加括号

增 / 改 / 删列

df["score"] = [90, 85, 92]                    # 新加列
df["age_next"] = df["age"] + 1                # 计算列
df.drop(columns=["score"], inplace=True)      # 删列
df.rename(columns={"age": "Age"}, inplace=True)

排序

df.sort_values("age")                         # 按 age 升序
df.sort_values("age", ascending=False)        # 降序
df.sort_values(["city", "age"])               # 多字段

简单聚合

df["age"].mean()                # 30.0
df["age"].max()                  # 35
df["city"].value_counts()        # 各城市人数

实战:从 CSV 到统计

df = pd.read_csv("sales.csv")
print(df.head())

# 总销售额
print(df["amount"].sum())

# 按地区分组求和
print(df.groupby("region")["amount"].sum().sort_values(ascending=False))

# 按月份
df["month"] = pd.to_datetime(df["date"]).dt.month
monthly = df.groupby("month")["amount"].sum()
print(monthly)

下一篇讲数据清洗的更多招数。