关注

Python之三大基本库——Pandas(1)

大家好,继之前我们总结了Numpy和Matplotlib两大基本库之后,今天来总结一下最后一个Python的基本库Pandas,关于Pandas的内容会讲解的更细一些,可能分为多篇内容,希望大家多支持。

目录

一、什么是Pandas

核心功能

应用场景

二、安装Pandas

三、使用Pandas

1、Pandas的两大核心:Series和DataFrame

1.1、Series-带标签的一维数组

a.什么是Series?

b.创建Series的多种方式

c.Series的核心属性

d.Series的索引和切片

e.Series的基本操作

1.2、DataFrame-二维表格数据结构

a.什么是DataFrame?

b.创建DataFrame的多种方式

c.DataFrame的核心属性

d.访问获取DataFrame中的数据

e.根据条件筛选数据

f.修改DataFrame

1.3、Series VS DataFrame 对比总结

1.4、实际应用示例

总结:


一、什么是Pandas

Pandas是Python中用于数据分析和处理的开源库,基于NumPy构建,专注于结构化数据(如表格、时间序列)的快速处理。

简单来说,pandas是一个开源的Python库,它为Python提供了快速、灵活、易于使用的数据结构和数据分析工具。它的名字来源于“Panel Data”(面板数据),但我们可以亲切地把它想象成一个超级智能的电子表格

官方文档:https://pandas.pydata.org/docs/

中文官方文档:pandas 文档 — pandas 2.3.0 文档 - pandas 数据分析库

核心功能

提供DataFrame和Series两种核心数据结构,支持数据清洗、缺失值处理、数据转换及统计分析,可高效处理CSV、Excel、SQL等多种格式数据。 ‌

应用场景

适用于金融数据分析、机器学习数据预处理等场景,尤其适合处理中小型数据集(如单机数据处理)。

二、安装Pandas

想要安装Pandas首先需要确认已经安装了Python,外网安装较慢也可以通过国内镜像安装,在之前的文章中我们讲解过,大家参考一下https://blog.csdn.net/m0_61746796/article/details/128575340

有需要的也可以在本地安装虚拟环境,可以参考下面文章

https://blog.csdn.net/m0_61746796/article/details/132691221?spm=1001.2014.3001.5502

然后在终端或者虚拟环境中执行,因为pandas的底层依赖于numpy所以最好一起安装

pip install pandas numpy -i https://pypi.tuna.tsinghua.edu.cn/simple

安装好之后我们在应用中使用的时候需要进行引用,通常会起一个别名,例如:

import pandas as pd

三、使用Pandas

1、Pandas的两大核心:Series和DataFrame

想要熟练使用pandas,就必须要了解它的核心概念组成,其中Series和DataFrame就是最根本的数据结构核心

1.1、Series-带标签的一维数组

a.什么是Series?

Series是Pandas中最基本的数据结构,你可以把它理解为:

  • 一个带标签的数组

  • 像Python中的列表,但更强大

  • 像Excel中的一列数据

  • 像字典和numpy数组的结合体

b.创建Series的多种方式

创建series大致总结了三种方式:从列表中创建/(指定索引)、从字典创建、从numpy数组创建

import pandas as pd
import numpy as np

# 方式1:从列表创建(最常用)
data_list = [90, 85, 92, 88]
scores = pd.Series(data_list)
print("从列表创建:")
print(scores)
print()

# 方式2:从列表创建并指定索引
scores_named = pd.Series([90, 85, 92, 88], 
                        index=['张三', '李四', '王五', '赵六'])
print("带自定义索引的Series:")
print(scores_named)
print()

# 方式3:从字典创建(键自动成为索引)
data_dict = {'张三': 90, '李四': 85, '王五': 92, '赵六': 88}
scores_dict = pd.Series(data_dict)
print("从字典创建:")
print(scores_dict)
print()

# 方式4:从numpy数组创建
arr = np.array([90, 85, 92, 88])
scores_np = pd.Series(arr, index=['A', 'B', 'C', 'D'])
print("从numpy数组创建:")
print(scores_np)
c.Series的核心属性
# 创建一个示例Series
students = pd.Series([90, 85, 92, 88, 95], 
                    index=['Alice', 'Bob', 'Charlie', 'David', 'Eve'])

print("Series数据:")
print(students)
print("\n核心属性:")
print(f"索引:{students.index}")      # 获取索引
print(f"值:{students.values}")      # 获取值数组
print(f"形状:{students.shape}")     # 获取形状
print(f"数据类型:{students.dtype}") # 数据类型
print(f"大小:{students.size}")      # 元素个数

运行结果如下:

d.Series的索引和切片
print("原始Series:")
print(students)
print()

# 按标签索引
print("Bob的成绩:", students['Bob'])
print("Charlie的成绩:", students.loc['Charlie'])

# 按位置索引
print("第一个元素:", students[0])
print("前三个元素:", students.iloc[:3])

# 布尔索引
print("90分以上的学生:")
print(students[students > 90])

# 多标签索引
print("多个学生成绩:")
print(students[['Alice', 'David', 'Eve']])

运行结果如下:

e.Series的基本操作
# 数学运算
print("所有成绩加5分:")
print(students + 5)

print("\n成绩乘以1.1:")
print(students * 1.1)

# 统计操作
print(f"\n平均分:{students.mean()}")
print(f"最高分:{students.max()}")
print(f"最低分:{students.min()}")
print(f"标准差:{students.std()}")

# 向量化操作
bonus = pd.Series([5, 3, 2, 4, 1], index=students.index)
print("\n加上额外加分:")
print(students + bonus)

运行结果如下:

1.2、DataFrame-二维表格数据结构

a.什么是DataFrame?

DataFrame是Pandas中最重要的数据结构,你可以把它理解为:

  • 一个二维的、大小可变的、可以包含异构数据类型的表格

  • 像Excel中的一个工作表

  • 像SQL数据库中的一张表

  • 由多个Series组成(每个列都是一个Series)

b.创建DataFrame的多种方式

创建series大致总结了三种方式:从字典创建(常用)、从列表中创建、从Series创建

# 方式1:从字典创建(最常用)
data = {
    '姓名': ['张三', '李四', '王五', '赵六'],
    '年龄': [20, 21, 19, 22],
    '成绩': [90, 85, 92, 88],
    '城市': ['北京', '上海', '广州', '深圳']
}

df = pd.DataFrame(data)
print("从字典创建的DataFrame:")
print(df)
print()

# 方式2:从列表的列表创建
data_list = [
    ['张三', 20, 90, '北京'],
    ['李四', 21, 85, '上海'],
    ['王五', 19, 92, '广州'],
    ['赵六', 22, 88, '深圳']
]

df_list = pd.DataFrame(data_list, 
                      columns=['姓名', '年龄', '成绩', '城市'])
print("从列表创建的DataFrame:")
print(df_list)
print()

# 方式3:从Series创建
name_series = pd.Series(['张三', '李四', '王五', '赵六'])
age_series = pd.Series([20, 21, 19, 22])
score_series = pd.Series([90, 85, 92, 88])

df_series = pd.DataFrame({
    '姓名': name_series,
    '年龄': age_series,
    '成绩': score_series
})
print("从Series创建的DataFrame:")
print(df_series)
c.DataFrame的核心属性
print("DataFrame基本信息:")
print(f"形状:{df.shape}")           # (行数, 列数)
print(f"列名:{df.columns}")         # 列索引
print(f"索引:{df.index}")           # 行索引
print(f"数据类型:\n{df.dtypes}")    # 每列的数据类型
print(f"基本信息:")
print(df.info())
print(f"统计描述:\n{df.describe()}") # 数值列的统计描述

运行结果如下:

d.访问获取DataFrame中的数据
print("原始DataFrame:")
print(df)
print()

# 选择单列(返回Series)
print("选择'姓名'列:")
print(df['姓名'])
print(type(df['姓名']))  # 查看数据类型

# 选择多列(返回DataFrame)
print("\n选择'姓名'和'成绩'列:")
print(df[['姓名', '成绩']])

# 使用loc按标签选择
print("\n选择前两行:")
print(df.loc[0:1])  # 包含结束位置

print("\n选择特定行和列:")
print(df.loc[1:2, ['姓名', '城市']])

# 使用iloc按位置选择
print("\n按位置选择前两行:")
print(df.iloc[0:2])  # 不包含结束位置

print("\n按位置选择特定行列:")
print(df.iloc[1:3, 0:2])  # 第1-2行,第0-1列
e.根据条件筛选数据
print("原始数据:")
print(df)
print()

# 单条件筛选
print("成绩大于90的学生:")
print(df[df['成绩'] > 90])

print("\n来自北京的学生:")
print(df[df['城市'] == '北京'])

# 多条件筛选
print("\n年龄大于20且成绩大于85的学生:")
print(df[(df['年龄'] > 20) & (df['成绩'] > 85)])

print("\n来自北京或上海的学生:")
print(df[(df['城市'] == '北京') | (df['城市'] == '上海')])

运行结果如下:

f.修改DataFrame

如何修改原有框架中的数据,下面分别从两个方向进行讲解,分别是从列的角度和行的角度

# 以列的角度来进行增删改

# 添加新列
df['等级'] = ['A', 'B', 'A', 'B']
print("添加'等级'列后:")
print(df)

# 修改列
df['成绩调整'] = df['成绩'] + 5
print("\n添加'成绩调整'列后:")
print(df)

# 修改特定值
df.loc[0, '成绩'] = 95  # 修改张三的成绩
print("\n修改张三成绩后:")
print(df)

# 删除列
df_dropped = df.drop('成绩调整', axis=1)
print("\n删除'成绩调整'列后:")
print(df_dropped)
# 以行的角度来进行增删改

# 1、增加新行
# 方法1:以两个dataframe的方式进行合并,使用字典创建新行
new_row = {'姓名': '王五', '年龄': 19, '成绩': 92, '城市': '广州'}
new_df = pd.DataFrame([new_row])  # 注意要放在列表中
df_new = pd.concat([df, new_df], ignore_index=True)
print("\n添加新行后:")
print(df_new)

# 添加多个新行
new_rows = pd.DataFrame([
    ['孙七', 23, 95, '杭州'],
    ['周八', 20, 87, '南京']
], columns=df.columns)

df = pd.concat([df, new_rows], ignore_index=True)
print("\n批量添加多行后:")
print(df)


# 方法2:使用loc在末尾添加(如果索引不存在会自动创建)
df.loc[2] = ['王五', 19, 92, '广州']  # 指定索引位置
df.loc[3] = ['赵六', 22, 88, '深圳']
print("\n使用loc添加行后:")
print(df)



# 2、删除行
# 方法1:删除单行(按索引)
df_dropped = df.drop(0)  # 删除索引为0的行
print("删除第一行后:")
print(df_dropped)

# 方法2:删除多行
df_dropped_multi = df.drop([1, 3])  # 删除索引为1和3的行
print("\n删除第2和第4行后:")
print(df_dropped_multi)


# 3、修改行
print("修改前的数据:")
print(df)

# 方法1:修改单行
df.loc[0] = ['张三丰', 25, 98, '武当山']  # 完全替换第一行
print("\n修改第一行后:")
print(df)

# 方法2:只修改特定列的值
df.loc[1, ['年龄', '成绩']] = [22, 93]  # 修改第二行的年龄和成绩
print("\n修改第二行部分值后:")
print(df)

# 方法3:修改单个值
df.loc[2, '城市'] = '成都'
print("\n修改第三行城市后:")
print(df)


# 方法4:按位置修改(第二行,第一列:姓名)
df.iloc[1, 0] = '李四四'
print("\n使用iloc修改后:")
print(df)

# 方法5:修改整行
df.iloc[2] = ['王五五', 24, 89, '重庆']
print("\n使用iloc修改整行后:")
print(df)

除了上述的例子,我们还有多种方法来操作数据,例如iloc、at、loc等等,后面有时间会简单给大家讲解一下各自的区别,更新后会来附上链接,有兴趣的小伙伴可以收藏。

1.3、Series VS DataFrame 对比总结

特性SeriesDataFrame
维度一维二维
类比Excel中的一列整个Excel表格
结构索引 + 值数组行索引 + 列索引 + 值矩阵
创建方式列表、字典、numpy数组字典、列表的列表、Series字典
选择数据s[label]s.loc[label]s.iloc[position]df[column]df.loc[row, col]df.iloc[row_pos, col_pos]
主要用途单一变量的数据多变量、表格型数据

1.4、实际应用示例

让我们用一个完整的例子来展示Series和DataFrame的配合使用:

# 创建学生数据
students_df = pd.DataFrame({
    '数学': [85, 92, 78, 90],
    '英语': [88, 79, 95, 87],
    '物理': [92, 85, 88, 94]
}, index=['张三', '李四', '王五', '赵六'])

print("学生成绩表:")
print(students_df)
print()

# 从DataFrame中提取Series
math_scores = students_df['数学']
print("数学成绩Series:")
print(math_scores)
print(f"类型:{type(math_scores)}")

# 对Series进行操作
print(f"\n数学平均分:{math_scores.mean()}")
print(f"数学最高分:{math_scores.max()}")

# 将Series操作结果添加回DataFrame
students_df['总分'] = students_df['数学'] + students_df['英语'] + students_df['物理']
students_df['平均分'] = students_df['总分'] / 3

print("\n添加总分和平均分后:")
print(students_df)

总结:

  • Series 是构建块,是单一维度的数据容器

  • DataFrame 是工作马,是实际数据分析中最常用的结构

  • 理解它们之间的关系(DataFrame由多个Series组成)是掌握Pandas的关键

  • 熟练使用索引和切片操作是进行有效数据分析的基础

建议你亲自运行这些代码,并尝试创建自己的Series和DataFrame,这样才能真正理解它们的工作原理!

今天就初步总结到这里,我会在后续更为深入的讲解分析,对比Pandas中其他的使用方法,希望大家多多支持,点赞关注收藏评论(转发请附上链接),我将更加有动力更新文章!!!

转载自CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/m0_61746796/article/details/153201960

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--