零基础入门 Pandas:Python 数据处理的 “瑞士军刀”
·
在 Python 的数据生态中,Pandas 绝对是绕不开的核心工具 —— 它就像一把为数据处理量身打造的 “瑞士军刀”,能轻松搞定数据读取、清洗、转换、分析等全流程工作。无论你是数据分析新手,还是想从 Excel/SQL 转向 Python 的从业者,掌握 Pandas 都能让你的数据处理效率提升一个量级。本文将从 Pandas 核心概念入手,结合实用代码实例,带你快速上手这款神器。
一、Pandas 是什么?
Pandas 是基于 NumPy 构建的开源 Python 库,诞生于 2008 年,核心设计目标是高效处理结构化数据(如表格、时间序列)。它提供了两种核心数据结构:Series(一维标签数组)和DataFrame(二维标签表格),并封装了大量便捷的函数,让原本需要几十行代码的操作(如数据筛选、分组统计)只需一两行就能完成。
二、快速上手:环境安装与基础操作
- 安装 Pandas
首先确保已安装 Python 环境,通过 pip 一键安装:
pip install pandas numpy # NumPy是Pandas的依赖,建议一并安装
- 核心数据结构
(1)Series:一维带标签的数组
Series由 “值(values)” 和 “索引(index)” 组成,可理解为 “带标签的一维数组”。
import pandas as pd
import numpy as np
# 1. 创建Series(默认索引为0,1,2...)
s1 = pd.Series([10, 20, 30, 40, 50])
print("基础Series:")
print(s1)
# 输出:
# 0 10
# 1 20
# 2 30
# 3 40
# 4 50
# dtype: int64
# 2. 自定义索引
s2 = pd.Series([1.5, 2.8, 3.2], index=["苹果", "香蕉", "橙子"])
print("\n自定义索引的Series:")
print(s2)
# 输出:
# 苹果 1.5
# 香蕉 2.8
# 橙子 3.2
# dtype: float64
# 3. 取值(两种方式:索引标签/位置)
print("\n取香蕉的值(标签):", s2["香蕉"]) # 2.8
print("取第一个值(位置):", s2.iloc[0]) # 1.5
(2)DataFrame:二维表格型数据
DataFrame是 Pandas 的核心,可理解为 “带行 / 列标签的表格”,每一列是一个Series,行索引统一。
# 1. 从字典创建DataFrame(最常用方式)
data = {
"姓名": ["张三", "李四", "王五", "赵六"],
"年龄": [22, 25, 28, 24],
"城市": ["北京", "上海", "广州", "深圳"],
"薪资": [8000, 12000, 10000, 9500]
}
df = pd.DataFrame(data)
print("基础DataFrame:")
print(df)
# 输出:
# 姓名 年龄 城市 薪资
# 0 张三 22 北京 8000
# 1 李四 25 上海 12000
# 2 王五 28 广州 10000
# 3 赵六 24 深圳 9500
# 2. 查看数据基本信息
print("\n数据基本信息:")
df.info() # 查看列类型、非空值数量
# 输出:
# <class 'pandas.core.frame.DataFrame'>
# RangeIndex: 4 entries, 0 to 3
# Data columns (total 4 columns):
# # Column Non-Null Count Dtype
# --- ------ -------------- -----
# 0 姓名 4 non-null object
# 1 年龄 4 non-null int64
# 2 城市 4 non-null object
# 3 薪资 4 non-null int64
# dtypes: int64(2), object(2)
# memory usage: 256.0+ bytes
print("\n数据统计摘要:")
print(df.describe()) # 数值列的均值、标准差、最值等
# 输出:
# 年龄 薪资
# count 4.000000 4.000000
# mean 24.750000 9875.000000
# std 2.217356 1541.103501
# min 22.000000 8000.000000
# 25% 23.500000 9125.000000
# 50% 24.500000 9750.000000
# 75% 25.750000 10500.000000
# max 28.000000 12000.000000
三、Pandas 核心操作:数据清洗与分析
实际工作中,原始数据往往存在缺失值、重复值、格式错误等问题,Pandas 提供了一套 “一站式” 清洗工具。
- 数据读取与保存
Pandas 支持读取 Excel、CSV、SQL、JSON 等几乎所有常见格式,以 CSV/Excel 为例:
# 1. 读取CSV文件
# df_csv = pd.read_csv("data.csv", encoding="utf-8")
# 2. 读取Excel文件
# df_excel = pd.read_excel("data.xlsx", sheet_name="Sheet1")
# 3. 保存为CSV(处理完数据后导出)
# df.to_csv("processed_data.csv", index=False) # index=False不保存行索引
- 数据筛选与切片
# 1. 按列筛选:只保留姓名和薪资列
df_sub = df[["姓名", "薪资"]]
print("\n筛选姓名和薪资列:")
print(df_sub)
# 2. 按条件筛选:薪资>9000的行
df_high_salary = df[df["薪资"] > 9000]
print("\n薪资>9000的人员:")
print(df_high_salary)
# 3. 多条件筛选(&表示且,|表示或,条件需用括号包裹)
df_filter = df[(df["年龄"] < 26) & (df["城市"] != "北京")]
print("\n年龄<26且非北京的人员:")
print(df_filter)
# 4. 按行索引筛选(iloc按位置,loc按标签)
print("\n取第2行数据(iloc):")
print(df.iloc[1]) # 索引从0开始
print("\n取姓名为王五的行(loc):")
print(df.loc[df["姓名"] == "王五"])
- 缺失值与重复值处理
# 构造含缺失值和重复值的测试数据
df_test = df.copy()
df_test.loc[1, "薪资"] = np.nan # 李四薪资设为缺失值
df_test = pd.concat([df_test, df_test.iloc[2:3]], ignore_index=True) # 重复王五行
print("\n含缺失值和重复值的DataFrame:")
print(df_test)
# 1. 检测缺失值
print("\n缺失值检测:")
print(df_test.isnull().sum()) # 统计每列缺失值数量
# 2. 填充缺失值(或删除:df_test.dropna())
df_test["薪资"] = df_test["薪资"].fillna(df_test["薪资"].mean()) # 用均值填充
print("\n填充缺失值后:")
print(df_test)
# 3. 删除重复行
df_test = df_test.drop_duplicates()
print("\n删除重复行后:")
print(df_test)
- 数据分组与聚合
分组统计是数据分析的核心,Pandas 的groupby能轻松实现 “按类别统计”。
# 构造按城市分组的测试数据
df_group = pd.DataFrame({
"城市": ["北京", "北京", "上海", "上海", "广州", "北京"],
"部门": ["技术", "产品", "技术", "销售", "技术", "销售"],
"薪资": [10000, 9000, 12000, 8000, 11000, 8500]
})
# 1. 按城市分组,计算薪资均值
city_salary = df_group.groupby("城市")["薪资"].mean()
print("\n各城市薪资均值:")
print(city_salary)
# 2. 多维度分组:按城市+部门,计算薪资总和与均值
group_stats = df_group.groupby(["城市", "部门"])["薪资"].agg(["sum", "mean"])
print("\n各城市各部门薪资统计:")
print(group_stats)
更多推荐


所有评论(0)