Pandas入门:用最简单的方式理解Python数据分析利器

111 阅读4分钟

Pandas 是 Python 中最流行、最强大的数据处理和分析库,专门用来处理表格和结构化数据。它让数据清洗、转换、统计分析和可视化变得简单高效,适合数据科学、金融分析、机器学习等多个领域。下面用最基础的知识点和丰富的示例,帮你快速掌握Pandas的核心功能。


1. Pandas的核心数据结构

  • Series(一维数据)
    类似带标签的一维数组,比如一列数据。
  • DataFrame(二维表格数据)
    类似Excel表格或SQL表,有行索引和列索引,每列可以是不同类型(数字、字符串等)。

示例:创建一个简单的DataFrame

import pandas as pd

data = {
    "姓名": ["张三", "李四", "王五"],
    "年龄": [28, 34, 29],
    "性别": ["男", "女", "男"]
}

df = pd.DataFrame(data)
print(df)

输出:

姓名年龄性别
0张三28
1李四34
2王五29

2. 读取和保存数据

Pandas支持多种数据格式的读写,最常用的是CSV和Excel。

读取CSV文件

df = pd.read_csv("data.csv")  # 读取CSV文件

保存为Excel文件

df.to_excel("output.xlsx", index=False)  # 保存为Excel,不保存行索引

3. 数据查看与基本操作

  • 查看前几行数据:df.head(5)
  • 查看数据维度:df.shape
  • 查看列信息和数据类型:df.info()
  • 统计描述(均值、中位数等):df.describe()

示例

print(df.head())       # 显示前5行
print(df.shape)        # 显示行数和列数
print(df.info())       # 显示列名和数据类型
print(df.describe())   # 数值列的统计信息

4. 数据清洗基础

数据分析前,通常要处理缺失值、重复数据和格式转换。

处理缺失值

  • 删除含缺失值的行:df.dropna(inplace=True)
  • 用指定值填充缺失:df.fillna(0, inplace=True)

删除重复行

df.drop_duplicates(inplace=True)

转换数据类型

df["日期"] = pd.to_datetime(df["日期"])  # 转换为日期类型
df["年龄"] = df["年龄"].astype(int)       # 转换为整数

5. 数据筛选与分组

筛选数据

# 选择年龄大于30的行
df_filtered = df[df["年龄"] > 30]

分组统计

# 按性别分组,计算平均年龄
grouped = df.groupby("性别")["年龄"].mean()
print(grouped)

6. 新增计算列

可以基于已有列计算新列。

df["总价"] = df["数量"] * df["单价"]

7. 数据排序

# 按年龄降序排序
df_sorted = df.sort_values(by="年龄", ascending=False)

8. 数据合并与连接

  • 合并(merge) :类似SQL中的JOIN
  • 连接(concat) :上下或左右拼接数据

示例:合并两个DataFrame

df1 = pd.DataFrame({"ID": [1, 2], "姓名": ["张三", "李四"]})
df2 = pd.DataFrame({"ID": [1, 2], "成绩": [90, 85]})

df_merged = pd.merge(df1, df2, on="ID")
print(df_merged)

9. 时间序列处理

Pandas对时间数据支持很好。

创建时间序列

dates = pd.date_range(start="2023-01-01", periods=5)
df = pd.DataFrame({"日期": dates, "值": [10, 20, 15, 30, 25]})
df.set_index("日期", inplace=True)
print(df)

重采样(按月求和)

python
monthly_sum = df.resample("M").sum()
print(monthly_sum)

10. 简单数据可视化

Pandas内置绘图功能,基于Matplotlib。

import matplotlib.pyplot as plt

df["年龄"].plot(kind="hist", bins=5, title="年龄分布")
plt.show()

11. 机器学习数据准备示例

from sklearn.preprocessing import MinMaxScaler

# 假设df有数值列"收入"
scaler = MinMaxScaler()
df["收入归一化"] = scaler.fit_transform(df[["收入"]])

# 类别变量独热编码
df = pd.get_dummies(df, columns=["性别"])

12. 处理大数据集的技巧

  • 使用chunksize分块读取大文件,避免内存溢出
  • 优化数据类型,如将int64转为int32,字符串转为category类型,节省内存
  • 使用向量化操作,避免循环,提高速度
  • 利用第三方库Dask或Swifter实现并行加速

分块读取示例

chunks = pd.read_csv("large_data.csv", chunksize=100000)
for chunk in chunks:
    print(chunk.head())

数据类型优化示例

df["id"] = df["id"].astype("int32")
df["类别"] = df["类别"].astype("category")

综合示例:电商销售数据分析

import pandas as pd
import matplotlib.pyplot as plt
from io import StringIO

data = """日期,商品,数量,单价
2024-01-01,手机,10,3000
2024-01-02,耳机,15,200
2024-01-03,电脑,5,5000
2024-01-04,手机,8,3000
2024-01-05,耳机,20,200"""

df = pd.read_csv(StringIO(data))
df["日期"] = pd.to_datetime(df["日期"])
df["销售额"] = df["数量"] * df["单价"]

# 总销售额
total_sales = df["销售额"].sum()
print(f"总销售额: {total_sales} 元")

# 最畅销商品(按销售额)
best_selling = df.groupby("商品")["销售额"].sum().idxmax()
print(f"最畅销商品: {best_selling}")

# 按日期绘制销售额柱状图
daily_sales = df.groupby("日期")["销售额"].sum()
daily_sales.plot(kind="bar", title="每日销售额")
plt.xlabel("日期")
plt.ylabel("销售额(元)")
plt.show()

通过以上内容,你可以掌握Pandas的基础知识和常用操作,轻松开始用Python进行数据处理和分析。Pandas让数据工作变得简单、高效,是数据科学和机器学习领域不可或缺的工具。