欢迎光临
我们一直在努力

从 0 到 1 掌握 Pandas:Python 数据分析必备库(全代码示例)

Pandas 是 Python 数据分析最核心、最常用的工具库,专门用于数据读取、清洗、处理、分析和可视化,堪称数据分析师、算法工程师的「瑞士军刀」。

本文全程以代码示例为主,覆盖 Pandas 90% 日常用法

一、先安装导入 Pandas

# 安装 pandas(终端/命令行执行)
pip install pandas

# 导入 pandas(行业标准写法)
import pandas as pd
import numpy as np # 配合使用


二、Pandas 两大核心数据结构

Pandas 只有两个核心数据结构,掌握它们就掌握了 Pandas 的基础:

  • Series:一维带标签的数组(类似带索引的列表)

  • DataFrame:二维表格型数据(类似 Excel 表格)

  • 1. Series 代码示例

    import pandas as pd
    import numpy as np
    # 1. 从列表中创建 Series
    s = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e'], name='score')
    print(s)
    print(type(s)) # <class 'pandas.Series'>
    print(s.values) # [1 2 3 4 5]
    print(s.index) # Index(['a', 'b', 'c', 'd', 'e'], dtype='str')
    print(s.name) # score
    print(s.dtype) # int64
    print(s.size) # 5
    print(s.ndim) # 1
    print(s.shape) # (5,)

    # 2. 从字典中创建Series
    s = pd.Series({'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}, name='score')
    print(s)
    print(type(s)) # <class 'pandas.Series'>
    print(s.values) # [1 2 3 4 5]
    print(s.index) # Index(['a', 'b', 'c', 'd', 'e'], dtype='str')
    print(s.name) # score
    print(s.dtype) # int64
    print(s.size) # 5
    print(s.ndim) # 1
    print(s.shape) # (5,)
    print(s.sample()) # Name: score, dtype: int64

    2. DataFrame 代码示例(最常用)

    # 用字典创建 DataFrame(每一对 key:value 是一列)
    data = {
    "姓名": ["小明", "小红", "小刚", "小李"],
    "年龄": [20, 21, 19, 22],
    "成绩": [85, 92, 78, 95],
    "城市": ["北京", "上海", "北京", "深圳"]
    }

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

    输出效果就是一张标准表格:

    姓名 年龄 成绩 城市
    0 小明 20 85 北京
    1 小红 21 92 上海
    2 小刚 19 78 北京
    3 小李 22 95 深圳


    三、数据读取与保存(Excel/CSV)

    同路径下,创建一个data.csv文件

    name,age,grade,grade
    张三,11,小学,76
    李四,12,初中,87
    王五,13,初中,98
    赵六,23,大学,98
    钱七,23,大学,60

    在这里插入图片描述
    Pandas 可以直接读写 Excel、CSV、SQL、JSON 等几乎所有常见数据格式。

    1. 读取 CSV

    # 读取 csv 文件
    df = pd.read_csv('data.csv')
    print(df)
    # 读取带中文的文件(指定编码)
    df = pd.read_csv('data.csv', encoding='utf-8')
    print(df)

    2. 保存数据

    # 保存为 CSV
    df.to_csv("new_data.csv", index=False, encoding="utf-8")

    index=False 表示不保存行索引,否则文件会多出一列无用数字。


    四、快速查看数据(必备)

    # 查看前五行
    print(df.head())
    # 查看前两行
    print(df.head(2))
    # 查看数据基本信息(列名、类型、空值、内存)
    print(df.info())
    # 查看数据描述信息
    print(df.describe())
    # 查看数据索引
    print(df.index)
    # 查看数据列名
    print(df.columns)
    # 查看行列数
    print('行数:', df.shape[0])
    print('列数:', df.shape[1])


    五、数据筛选与查询(最常用操作)

    1. 选择列

    # 单列
    df["姓名"]

    # 多列(传入列表)
    df[["姓名", "成绩"]]

    1.1 扩展:KeyError: “None of [Index([‘name’, ‘age’], dtype=‘str’)] are in the [index]”

    • 为什么 pandas 先取单列再取多列会报错?

    很多刚学 pandas 的同学都会遇到一个经典报错:先取单列正常,再取多列直接 KeyError,但反过来先多列再单列却完全没问题。

    • 核心原因

    df['name']:返回 Series(一维数据,不再是表格)

    df[['name','age']]:返回 DataFrame(二维表格,支持多列索引)

    • 错误顺序(报错)

    df = df['name'] # df 变成 Series,原表格被覆盖
    df = df[['name','age']] # Series 没有列名 → KeyError

    • 正确顺序(不报错)

    df = df[['name','age']] # 依旧是 DataFrame
    df = df['name'] # DataFrame 取单列正常

    • 最佳实践

    不要覆盖原变量,避免类型混乱:

    # 单列用新变量
    s_name = df['name']
    # 多列用新变量
    df_sub = df[['name','age']]

    一句话总结:Series 不能当 DataFrame 用,别把表格变量改成单列!

    2. 条件筛选

    # 2. 条件筛选
    df = pd.read_csv('data.csv')
    # 单条件筛选(年龄 > 18)
    print(df[df['age'] > 18])
    # 多条件筛选(&且 |或,必须加括号,grade=初中且score>80)
    print(df[(df['grade'] == '初中') & (df['score'] > 80)])

    3. 模糊查询(包含某字符)

    # 3. 模糊查询
    df = pd.read_csv('data.csv')
    # 姓名中包含 张
    print(df[df['name'].str.contains('张')])

    4. 定位取值(iloc /loc)

    # 4. 定位取值
    df = pd.read_csv('data.csv')
    # 行索引为0,按标签取值
    print(df.loc[0, 'name'])
    # 行索引为0,列索引为0
    print(df.iloc[0, 0])


    六、数据清洗(处理缺失值、重复值)

    1. 查看缺失值

    # 查看每列缺失值数量
    df.isnull().sum()

    2. 处理缺失值

    再补充一些数据

    name,age,grade,score
    张三,11,小学,76
    李四,12,初中,87
    王五,13,初中,98
    赵六,23,大学,98
    钱七,23,大学,60
    孙八,,,89
    ,25,大学,
    ,"",,
    ,25,大学,
    "\\"\\"",25,大学,

    在这里插入图片描述

    # 删除含缺失值的行
    df = pd.read_csv('data.csv')
    print(df)

    # 查看缺失值
    print(df.isnull())
    # 查看缺失值个数
    print(df.isnull().sum())
    # 用指定值填充缺失值
    # df = df.fillna(0)
    # print(df)
    # 用均值填充缺失值(只能填充数字列)
    # df = df.fillna(df.mean(numeric_only=True))
    # 方案2:指定列填充(更精准)
    df['age'] = df['age'].fillna(df['age'].mean())
    df['score'] = df['score'].fillna(df['score'].mean())
    print(df)
    # 删除含缺失值的行
    df = df.dropna()
    print(df)

    3. 处理重复值

    再补充一些数据
    name,age,grade,score
    张三,11,小学,76
    张三,11,小学,76
    张三,11,小学,76
    李四,12,初中,87
    王五,13,初中,98
    赵六,23,大学,98
    钱七,23,大学,60
    钱七,23,大学,60
    钱七,23,大学,60
    钱七,23,大学,60
    孙八,,,89
    ,25,大学,
    ,"",,
    ,25,大学,
    "\\"\\"",25,大学,

    在这里插入图片描述

    # 查看重复行
    df = pd.read_csv('data.csv')
    print(df.duplicated())
    # 查看重复行个数
    print(df.duplicated().sum())
    # 删除重复行(序号不变)
    df = df.drop_duplicates()
    print(df)


    七、数据新增、修改、删除

    1. 新增列

    # 新增列
    df = pd.read_csv('data.csv')
    df['new_col'] = 'new_value'
    print(df)
    # 根据条件新增列
    # 创建一个新列,根据age列的值,将age大于18的行标记为old,小于18的行标记为young
    df['new_col2'] = np.where(df['age'] > 18, 'old', 'young')
    print(df)
    # 删除列
    df = df.drop(columns=['new_col'])
    print(df)

    拓展:真正修改原始文件

    import pandas as pd
    import numpy as np

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

    # 新增列
    df['new_col'] = 'new_value'

    # 根据年龄条件新增列
    df['new_col2'] = np.where(df['age'] > 18, 'old', 'young')

    # 删除列
    df = df.drop(columns=['new_col'])

    # 保存到原始文件(关键步骤)
    df.to_csv('data.csv', index=False)

    # 打印查看结果
    print(df)

    运行后:

    data.csv 里会多出一列 new_col2(old/young)
    不会有多余的行号列
    原文件被覆盖更新

    # 如果不想覆盖原文件,可以改成保存为新文件:
    df.to_csv('data_new.csv', index=False)

    2. 修改数据

    # 修改数据
    df.loc[0, 'name'] = 'aaa'
    print(df)
    # 批量替换
    df = df.replace({'name': '张三'}, 'bbb')
    print(df)

    3. 删除列

    # 删除列
    df = df.drop(columns=['new_col2'])
    print(df)


    八、分组统计/ 聚合分析(核心!)

    Pandas 最强大的功能之一:groupby 分组统计。

    # 按城市分组,求成绩平均值
    df.groupby("城市")["成绩"].mean()

    # 按城市分组,求多个统计值
    df.groupby("城市").agg({
    "成绩": ["mean", "max", "min"],
    "年龄": "mean"
    })

    # 重置索引,变回标准表格
    df.groupby("城市")["成绩"].mean().reset_index()


    九、排序

    # 按年龄排序
    print(df.sort_values('age'))
    # 按年龄降序排序
    print(df.sort_values('age', ascending=False))
    # 按年龄和成绩排序
    print(df.sort_values(['age', 'score'], ascending=[True, False]))


    十、数据类型转换

    # 数据类型转换
    df = pd.read_csv('data.csv')
    # 查看数据类型
    print(df.dtypes)
    # 将age列转换为int
    # 由于age里有空值,不能直接用 int
    # 方式一:改成 Int64(大写 I),它能兼容空值,不会报错!
    # df['age'] = df['age'].astype('Int64')
    # print(df.dtypes)
    # 方式二:用 fillna() 方法填充空值,然后再转换为 int
    df['age'] = df['age'].fillna(0).astype(int)
    print(df.dtypes)
    # 将age列转换为字符串 str
    df['age'] = df['age'].astype(str)
    print(df.dtypes)


    十一、完整小案例(从头到尾跑一遍)

    import pandas as pd

    # 1. 创建数据
    data = {
    "姓名": ["小明", "小红", "小刚", "小李"],
    "年龄": [20, 21, 19, 22],
    "成绩": [85, 92, 78, 95],
    "城市": ["北京", "上海", "北京", "深圳"]
    }
    df = pd.DataFrame(data)

    # 2. 查看数据
    print(df.head())

    # 3. 筛选优秀学生(>=90)
    excellent = df[df["成绩"] >= 90]
    print("\\n优秀学生:")
    print(excellent)

    # 4. 按城市统计平均分
    city_score = df.groupby("城市")["成绩"].mean().reset_index()
    print("\\n各城市平均分:")
    print(city_score)

    # 5. 保存结果
    city_score.to_csv("城市成绩统计.csv", index=False, encoding="utf-8-sig")


    总结

    这篇文章用纯代码示例覆盖了 Pandas 最常用的功能:

    • 创建、读取、保存数据

    • 查看、筛选、查询数据

    • 清洗缺失值、重复值

    • 新增、修改、删除列

    • 分组统计、排序

    Pandas 上手简单、功能强大,是数据分析必须掌握的核心库
    重点提示:

  • Pandas 核心:Series(一维)+ DataFrame(二维表格)

  • 高频操作:读取、筛选、分组、清洗、保存

  • 学习方法:多敲代码、多跑示例,Pandas 用熟就一通百通

  • 赞(0)
    未经允许不得转载:171主机测评 » 从 0 到 1 掌握 Pandas:Python 数据分析必备库(全代码示例)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址