当前位置:首页>python>python从基础到AI-科学计算三件套-pandas基础

python从基础到AI-科学计算三件套-pandas基础

  • 2026-10-23 02:34:48
python从基础到AI-科学计算三件套-pandas基础
点击蓝字,立即关注
如果您对人工智能方面的分享感兴趣,欢迎您关注,我们的公众号:
已经完成的读书笔记,如您感兴趣,请移步,往期文章精选:
python机器学习读书笔记导航
《LangChain实战派》读书笔记-目录
《基于大模型的RAG应用开发与优化》读书笔记-导航
如果您对在家做菜也有兴趣,欢迎您关注我们的联合公众号:

写在前面

这是一个新系列的文章,从python基础到AI应用,从基础变成语言到算法使用。不讲原理,只讲用法。
每次留下一个小问题,并在下一次文章开头进行解答。
本系列文章内容,全部由AI来写。

目录

  • 引言
  • 上期作业
  • pandas基础
  • 动手实践
  • 总结
  • 附录

引言

在掌握了NumPy这一强大的数值计算工具后,我们将迈入数据科学的下一个核心领域:表格数据的处理与分析。如果说NumPy是处理同质化数值数组的利器,那么Pandas就是为处理和分析带有标签的、异质性的表格数据而生的瑞士军刀。它构建于NumPy之上,提供了更高级的数据结构和操作,让数据清洗、转换、分析和可视化变得异常简单。本文将从零开始,带你系统学习Pandas的基础知识,为你的数据分析之旅打下坚实的基石。


上期作业解答:巩固NumPy技能

任务一:数组创建与属性

创建一个形状为 (3, 4) 的二维数组,数组元素为从0到11的整数,并打印其形状、维度和数据类型。

import numpy as np

# 创建数组
arr = np.arange(12).reshape(3, 4)
print("创建的数组:")
print(arr)
print("\n数组形状:", arr.shape)
print("数组维度:", arr.ndim)
print("数据类型:", arr.dtype)

输出结果:

创建的数组:
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

数组形状: (3, 4)
数组维度: 2
数据类型: int64

任务二:数组操作与计算

对上述数组进行转置,并计算所有元素的和、每列的平均值。

# 数组转置
arr_transposed = arr.T
print("转置后的数组:")
print(arr_transposed)

# 计算总和与列平均值
total_sum = arr.sum()
column_means = arr.mean(axis=0)  # axis=0 表示沿列方向计算(即每列)

print("\n数组所有元素之和:", total_sum)
print("每列的平均值:", column_means)

输出结果:

转置后的数组:
[[ 0  4  8]
 [ 1  5  9]
 [ 2  6 10]
 [ 3  7 11]]

数组所有元素之和: 66
每列的平均值: [4. 5. 6. 7.]

任务三:简单数据分析

创建一个包含10个随机整数(范围1-100)的一维数组,找出其中的最大值、最小值以及大于50的元素。

# 设置随机种子使结果可复现
np.random.seed(42)
random_arr = np.random.randint(1, 101, size=10)
print("随机整数数组:", random_arr)

max_val = random_arr.max()
min_val = random_arr.min()
greater_than_50 = random_arr[random_arr > 50]

print("最大值:", max_val)
print("最小值:", min_val)
print("大于50的元素:", greater_than_50)

输出结果:

随机整数数组: [52 93 15 72 61 21 83 87 75 75]
最大值: 93
最小值: 15
大于50的元素: [52 93 72 61 83 87 75 75]

Pandas基础入门

什么是Pandas?

Pandas 是一个开源的、BSD许可的Python库,为Python编程语言提供了高性能、易于使用的数据结构和数据分析工具。它的名字来源于“Panel Data”(面板数据)和“Python Data Analysis”(Python数据分析)。Pandas的核心价值在于能够轻松处理带有行标签和列名的表格数据(如CSV、Excel文件),进行数据清洗、重塑、切片、聚合以及可视化等操作。它完美地补充了NumPy的功能,是进行数据分析和数据科学项目不可或缺的工具。

读取数据:从文件开始

数据分析的第一步往往是获取数据。Pandas提供了极其简单的函数来读取各种格式的数据文件。

import pandas as pd  # 惯例是将pandas导入为pd

# 读取CSV文件,假设文件名为‘data.csv’
# df = pd.read_csv('data.csv')
# 由于我们可能没有实际文件,这里演示从字符串读取(模拟CSV内容)
csv_data = """姓名,年龄,城市,分数
张三,25,北京,88
李四,30,上海,92
王五,28,广州,85
"""

from io import StringIO
df_from_csv = pd.read_csv(StringIO(csv_data))
print("从CSV字符串读取的DataFrame:")
print(df_from_csv)

输出结果:

从CSV字符串读取的DataFrame:
   姓名  年龄  城市  分数
0  张三  25  北京  88
1  李四  30  上海  92
2  王五  28  广州  85

提示:pd.read_excel() 函数可以用于读取Excel文件。数据被读取后,Pandas会将其存储在它最核心的数据结构——DataFrame中。

Pandas两大核心数据结构

Pandas主要围绕两种数据结构展开:

  • Series
    一维带标签的数组。可以看作是一个有索引的列。
  • DataFrame
    二维的、大小可变的、有行标签和列标签的表格数据结构。可以看作是共享同一个索引的多个Series的集合。

一维序列:Series

创建Series对象
Series可以从列表、字典、NumPy数组等创建。

# 从列表创建,默认索引为0, 1, 2...
s1 = pd.Series([10, 20, 30, 40])
print("从列表创建:")
print(s1)

# 从字典创建,字典的键会成为索引
s2 = pd.Series({'a': 100, 'b': 200, 'c': 300})
print("\n从字典创建:")
print(s2)

# 从NumPy数组创建,并指定自定义索引
import numpy as np
arr = np.array([1.1, 2.2, 3.3])
s3 = pd.Series(arr, index=['x', 'y', 'z'])
print("\n从NumPy数组创建(自定义索引):")
print(s3)

输出结果:

从列表创建:
0    10
1    20
2    30
3    40
dtype: int64

从字典创建:
a    100
b    200
c    300
dtype: int64

从NumPy数组创建(自定义索引):
x    1.1
y    2.2
z    3.3
dtype: float64

Series的常用属性和方法

s = pd.Series([5, 10, 15, 20, 25], index=['a', 'b', 'c', 'd', 'e'])

# 常用属性
print("Series对象s:")
print(s)
print("\n索引:", s.index)
print("值(NumPy数组):", s.values)
print("数据类型:", s.dtype)
print("形状:", s.shape)

# 常用方法
print("\n前3个元素:")
print(s.head(3))  # 默认head()显示前5个
print("\n后2个元素:")
print(s.tail(2))
print("\n描述性统计:")
print(s.describe())

# 索引选取数据
print("\n通过标签索引选取‘c’的值:", s['c'])
print("通过位置索引选取第2个值(从0开始):", s.iloc[1])  # iloc基于整数位置

输出结果:

Series对象s:
a     5
b    10
c    15
d    20
e    25
dtype: int64

索引: Index(['a', 'b', 'c', 'd', 'e'], dtype='object')
值(NumPy数组): [ 5 10 15 20 25]
数据类型: int64
形状: (5,)

前3个元素:
a     5
b    10
c    15
dtype: int64

后2个元素:
d    20
e    25
dtype: int64

描述性统计:
count     5.000000
mean     15.000000
std       7.905694
min       5.000000
25%      10.000000
50%      15.000000
75%      20.000000
max      25.000000
dtype: float64

通过标签索引选取‘c’的值: 15
通过位置索引选取第2个值(从0开始): 10

二维表格:DataFrame

创建DataFrame对象
DataFrame的创建方式更加灵活。

# 1. 从字典创建(最常用):键是列名,值是列数据(列表或Series)
data_dict = {
'姓名': ['张三', '李四', '王五'],
'年龄': [25, 30, 28],
'城市': ['北京', '上海', '广州']
}
df1 = pd.DataFrame(data_dict)
print("从字典创建:")
print(df1)

# 2. 从列表的列表创建,需指定columns参数
data_list = [['苹果', 5.5], ['香蕉', 3.2], ['橙子', 4.8]]
df2 = pd.DataFrame(data_list, columns=['商品', '价格'])
print("\n从列表的列表创建:")
print(df2)

# 3. 从NumPy二维数组创建
np_array = np.random.randn(3, 2)  # 3行2列的标准正态分布随机数
df3 = pd.DataFrame(np_array, columns=['A列', 'B列'])
print("\n从NumPy数组创建:")
print(df3)

输出结果:

从字典创建:
   姓名  年龄  城市
0  张三  25  北京
1  李四  30  上海
2  王五  28  广州

从列表的列表创建:
    商品   价格
0   苹果  5.5
1   香蕉  3.2
2   橙子  4.8

从NumPy数组创建:
        A列       B列
0 -0.234153  1.579213
1  0.767435 -0.469474
2  0.542560 -0.463418

DataFrame的常用属性和方法

# 使用之前从CSV读取的df_from_csv作为示例
df = df_from_csv.copy()  # 复制一份避免影响原数据
print("DataFrame内容:")
print(df)

# 常用属性
print("\n列名:", df.columns)
print("行索引:", df.index)
print("各列数据类型:")
print(df.dtypes)
print("形状(行数,列数):", df.shape)

# 常用方法
print("\n查看前2行:")
print(df.head(2))
print("\n查看后1行:")
print(df.tail(1))
print("\nDataFrame的详细信息(内存、数据类型等):")
print(df.info())
print("\n数值列的描述性统计:")
print(df.describe())

# 数据选取
print("\n选取‘姓名’列(返回Series):")
print(df['姓名'])
print("\n选取‘年龄’和‘分数’两列(返回DataFrame):")
print(df[['年龄', '分数']])
print("\n使用iloc按整数位置选取第0行:")
print(df.iloc[0])
print("\n使用loc按标签选取索引为1的行:")
print(df.loc[1])

输出结果:

DataFrame内容:
   姓名  年龄  城市  分数
0  张三  25  北京  88
1  李四  30  上海  92
2  王五  28  广州  85

列名: Index(['姓名', '年龄', '城市', '分数'], dtype='object')
行索引: RangeIndex(start=0, stop=3, step=1)
各列数据类型:
姓名    object
年龄     int64
城市    object
分数     int64
dtype: object
形状(行数,列数): (3, 4)

查看前2行:
   姓名  年龄  城市  分数
0  张三  25  北京  88
1  李四  30  上海  92

查看后1行:
   姓名  年龄  城市  分数
2  王五  28  广州  85

DataFrame的详细信息(内存、数据类型等):
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 4 columns):
 #   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 
 0   姓名      3 non-null      object
 1   年龄      3 non-null      int64 
 2   城市      3 non-null      object
 3   分数      3 non-null      int64 
dtypes: int64(2), object(2)
memory usage: 224.0+ bytes
None

数值列的描述性统计:
              年龄         分数
count   3.000000   3.000000
mean   27.666667  88.333333
std     2.516611   3.511885
min    25.000000  85.000000
25%    26.500000  86.500000
50%    28.000000  88.000000
75%    29.000000  90.000000
max    30.000000  92.000000

选取‘姓名’列(返回Series):
0    张三
1    李四
2    王五
Name: 姓名, dtype: object

选取‘年龄’和‘分数’两列(返回DataFrame):
   年龄  分数
0  25  88
1  30  92
2  28  85

使用iloc按整数位置选取第0行:
姓名    张三
年龄    25
城市    北京
分数    88
Name: 0, dtype: object

使用loc按标签选取索引为1的行:
姓名    李四
年龄    30
城市    上海
分数    92
Name: 1, dtype: object

动手实践:掌握Pandas基础

恭喜你学完了Pandas的基础知识!现在,请通过以下作业来巩固你的学习成果。请确保你的代码只使用本文介绍过的Pandas知识点。

作业任务:

  1. 创建Series
    创建一个 Series,数据为 [88, 92, 79, 95, 80],索引为 ['语文', '数学', '英语', '物理', '化学'],并将其命名为 my_series。打印这个Series,并输出其 values 和 index 属性。

  2. 创建DataFrame
    使用一个字典创建一个 DataFrame,字典内容如下:

    • ‘产品’
       列:[‘笔记本’, ‘鼠标’, ‘键盘’]
    • ‘销量’
       列:[120, 200, 150]
    • ‘单价’
       列:[5500.0, 80.5, 299.0]
      将其命名为 sales_df。打印这个DataFrame,并使用 .info() 方法查看其信息。
  3. 数据选取与计算
    对上面创建的 sales_df 进行操作:

    • 选取 ‘产品’ 和 ‘销量’ 两列,并打印。
    • 计算 ‘销售额’(销售额 = 销量 × 单价),并将结果作为一个新列添加到 sales_df 中。
    • 打印添加新列后的完整 sales_df。
    • 使用 .describe() 方法查看数值列(销量、单价、销售额)的描述性统计。

总结

本文系统介绍了Python数据分析库 Pandas 的核心基础。我们从 读取外部数据文件(如CSV)出发,这是数据分析的起点。接着,我们深入学习了Pandas的两大核心数据结构:一维带标签的 Series 和二维表格型 DataFrame。我们掌握了如何从列表、字典、NumPy数组等多种数据源创建它们,并熟悉了查看其 index、columns、values、shape、dtype 等关键属性的方法。通过 head()、tail()、info()、describe() 等方法,我们可以快速了解数据的全貌。最后,我们学会了如何通过列名或 iloc/loc 索引来选取所需的数据子集。

记住这个基础流程:读取数据 → 创建/获取DataFrame/Series → 查看数据概览 → 选取目标数据。熟练掌握这些操作,你就已经成功打开了使用Pandas进行数据处理与分析的大门。


附录:Pandas核心知识点速查表

类别
函数/方法/属性
简要说明
数据读取pd.read_csv(‘file.csv’)
从CSV文件读取数据,返回DataFrame。
pd.read_excel(‘file.xlsx’)
从Excel文件读取数据。
Series创建pd.Series(data, index=idx)
创建Series对象。data 可以是列表、字典等。
DataFrame创建pd.DataFrame(data, columns=cols)
创建DataFrame对象。data 可以是字典、列表的列表等。
通用属性.index
获取行索引。
.columns
获取列名(仅DataFrame)。
.values
以NumPy数组形式返回数据。
.dtype
 / .dtypes

请在微信客户端打开

最新文章

随机文章