跳到主要内容

Pandas 入门

Pandas 主要解决“带标签的表格数据处理”问题。NumPy 更像数组工具箱,Pandas 更像表格和时间序列工具箱。

两个核心对象

Series

import pandas as pd

s = pd.Series([10, 20, 30], index=["a", "b", "c"])
print(s)

DataFrame

df = pd.DataFrame(
{
"name": ["alice", "bob", "charlie"],
"score": [95, 88, 91],
"city": ["Chengdu", "Beijing", "Shanghai"],
}
)

大多数日常处理都围绕 DataFrame 展开。

读取与保存

df = pd.read_csv("users.csv")
df.to_csv("out.csv", index=False)

如果环境里装了相关依赖,还可以读写 Excel、Parquet 等格式。

先看懂表结构

print(df.head())
print(df.info())
print(df.shape)
print(df.columns)

这是我接手一份新数据时几乎必做的第一步。

选列、选行、条件过滤

print(df["name"])
print(df[["name", "score"]])
print(df.loc[0, "name"])
print(df.iloc[0, 1])
print(df[df["score"] >= 90])
  • loc:按标签选
  • iloc:按位置选

缺失值处理

print(df.isna().sum())

cleaned = df.fillna({"score": 0, "city": "unknown"})

常见操作:

  • isna() / notna()
  • dropna()
  • fillna()

新列与变换

df["passed"] = df["score"] >= 60
df["score_level"] = df["score"].map(lambda x: "A" if x >= 90 else "B")

map()apply()replace() 经常一起出现,但我更推荐这样理解:

  • 简单映射:优先 map()replace()
  • 按列或按行处理:apply()
  • 对整张表逐元素处理:applymap(),但能不用就尽量不用

分组聚合

result = df.groupby("city")["score"].mean()
print(result)

这是 Pandas 最常见的价值之一:把“按某列分组后统计”的动作做得很顺手。

排序与去重

print(df.sort_values("score", ascending=False))
print(df.drop_duplicates(subset=["name"]))

我自己的使用顺序

处理一张表时,我通常按这个顺序:

  1. head() / info() / shape() 看结构
  2. 处理缺失值和类型
  3. 做筛选、映射和新列
  4. 再做分组、聚合和导出

关联阅读