Python学习之-Pandas详解

前言:

Pandas 是一个开源的 Python 数据分析库,它提供了高性能、易于使用的数据结构和数据分析工具。Pandas提供 了方便的类表格和类SQL的操作,同时提供了强大的缺失值处理方法,可以方便的进行数据导入、选取、清洗、处理、合并、统计分析等操作。最核心的两个数据结构是 DataFrame 和 Series。

1 DataFrame和 Series的用法

DataFrame 是 Pandas 库中另一个基本的数据结构。DataFrame 可以看作是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame 既有行索引也有列索引,它可以被看作是由 Series 组成的字典(共用同一个索引)。

Pandas中的Series对象是一种带有标签数据的一维数组,标签在Pandas

中有对应的数据类型"Index", Series类似于一维数组与字典的结合。

1.1 创建一个 DataFrame 的示例:

python 复制代码
#!/usr/bin/env python
# coding=utf-8
"""
# @Time    : 2024/4/14 14:14
# @Author  : Summer
# @File    : pandas_test
# @describe:
"""
import pandas as pd

# 创建一个 DataFrame 对象
data = {'Country': ['Belgium', 'India', 'Brazil'],
        'Capital': ['Brussels', 'New Delhi', 'Brasília'],
        'Population': [11190846, 1303171035, 207847528]}

df = pd.DataFrame(data)

# 查看 DataFrame 对象
print(df)
'''
   Country    Capital  Population
0  Belgium   Brussels    11190846
1    India  New Delhi  1303171035
2   Brazil   Brasília   207847528
'''

访问和操作 DataFrame 数据:

python 复制代码
#!/usr/bin/env python
# coding=utf-8
"""
# @Time    : 2024/4/14 14:14
# @Author  : Summer
# @File    : pandas_test
# @describe:
"""
import pandas as pd

# 创建一个 DataFrame 对象
data = {'Country': ['Belgium', 'India', 'Brazil'],
        'Capital': ['Brussels', 'New Delhi', 'Brasília'],
        'Population': [11190846, 1303171035, 207847528]}

df = pd.DataFrame(data)

# 访问列数据
print(df['Capital'])  # 输出: "Capital" 列的值

# 添加新列
df['Area'] = pd.Series([30510, 3287263, 8515767], index=[0, 1, 2])
print(df)

# 访问行数据,通过行索引 (loc) 或行数 (iloc)
print(df.loc[1])  # 输出第二行数据(基于行标签)
print(df.iloc[1])  # 输出第二行数据(基于行数)

# 数据筛选
filtered_df = df[df['Population'] > 100000000]
print(filtered_df)

# 数据排序
sorted_df = df.sort_values(by='Population', ascending=False)
print(sorted_df)

1.2 Series的创建

python 复制代码
#!/usr/bin/env python
# coding=utf-8
"""
# @Time    : 2024/4/14 14:14
# @Author  : Summer
# @File    : pandas_test
# @describe:
"""
import pandas as pd

# 通过列表创建 Series
s1 = pd.Series([1, 3, 5, 7, 9])

# 创建时指定索引
s2 = pd.Series([1, 3, 5, 7, 9], index=['a', 'b', 'c', 'd', 'e'])

# 通过字典创建 Series,字典的键自动成为索引
s3 = pd.Series({'a': 1, 'b': 3, 'c': 5, 'd': 7, 'e': 9})

1.3 索引和切片

python 复制代码
# 使用索引访问数据
print(s2['c'])  # 输出: 5

# 使用切片访问多个数据,切片可以使用位置或索引
print(s2['b':'d'])  # 输出索引 'b' 到 'd' 的数据
'''
b    3
c    5
d    7
dtype: int64
'''
print(s2[1:4])      # 输出位置 1 到 3 的数据
'''
b    3
c    5
d    7
dtype: int64

'''

1.4 处理缺失值

python 复制代码
#!/usr/bin/env python
# coding=utf-8
"""
# @Time    : 2024/4/14 14:14
# @Author  : Summer
# @File    : pandas_test
# @describe:
"""
import pandas as pd

# 检测缺失值
s6 = pd.Series([1, 2, None, 4])
print(s6.isnull())  # 查看哪些是缺失值
'''
0    False
1    False
2     True
3    False
dtype: bool
'''

# 填充缺失值
print(s6.fillna(0))  # 将缺失值填充为 0
'''
0    1.0
1    2.0
2    0.0
3    4.0
dtype: float64
'''

# 删除缺失值
print(s6.dropna())  # 删除所有缺失值
'''
0    1.0
1    2.0
3    4.0
dtype: float64
'''

1.5 Series 之间的运算

Pandas 支持 Series 之间的算数运算,包括加、减、乘、除等,并且会自动根据索引对齐数据。

python 复制代码
#!/usr/bin/env python
# coding=utf-8
"""
# @Time    : 2024/4/14 14:14
# @Author  : Summer
# @File    : pandas_test
# @describe:
"""
import pandas as pd

s7 = pd.Series([10, 20, 30, 40], index=['a', 'b', 'c', 'd'])
s8 = pd.Series([1, 2, 3, 4], index=['b', 'c', 'd', 'e'])

# 根据索引对齐进行加法运算,没有对齐的索引处会产生 NaN
result = s7 + s8
print(result)
'''
a     NaN
b    21.0
c    32.0
d    43.0
e     NaN
dtype: float64
'''

1.6 数据描述和统计

python 复制代码
#!/usr/bin/env python
# coding=utf-8
"""
# @Time    : 2024/4/14 14:14
# @Author  : Summer
# @File    : pandas_test
# @describe:
"""
import pandas as pd


s2 = pd.Series([1, 3, 5, 7, 9], index=['a', 'b', 'c', 'd', 'e'])

# 计算基本的统计数据
print(s2.describe())  # 输出 count, mean, std, min, percentiles, max

# 其他统计函数
print(s2.max())  # 最大值
print(s2.min())  # 最小值
print(s2.sum())  # 求和
'''
count    5.000000
mean     5.000000
std      3.162278
min      1.000000
25%      3.000000
50%      5.000000
75%      7.000000
max      9.000000
dtype: float64
9
1
25
'''

2 常见的pandas使用场景

2.1 数据读取和写入

Pandas 支持多种格式的数据读取和写入,如 CSV、Excel、JSON、HTML、SQL 等。

python 复制代码
#!/usr/bin/env python
# coding=utf-8
"""
# @Time    : 2024/4/14 14:14
# @Author  : Summer
# @File    : pandas_test
# @describe:
"""
import pandas as pd

try:
    df = pd.read_csv('example.csv', encoding='utf-8')  # 默认编码
except UnicodeDecodeError:
    try:
        df = pd.read_csv('example.csv', encoding='latin1')  # 尝试 latin1 编码
    except UnicodeDecodeError:
        df = pd.read_csv('example.csv', encoding='ISO-8859-1')  # 尝试 ISO-8859-1 编码
        # 或者使用其他可能的编码,比如 'cp1252', 'gbk' 等

# 写入 Excel 文件
df.to_excel('example.xlsx', sheet_name='Sheet1')

2.2 数据查看和简单统计

python 复制代码
# 查看前5行数据
print(df.head())

# 查看数据描述性统计
print(df.describe())

2.3 数据筛选和过滤

使用条件表达式选择数据或者使用某些特定的列。

python 复制代码
# 选择 "age" 列大于 30 的行
filtered_df = df[df['age'] > 30]

# 仅选择 "name" 和 "age" 两列
selected_columns = df[['name', 'age']]

2.4. 缺失数据处理

Pandas 提供了处理缺失数据的功能,如填充缺失值或删除含有缺失值的行列。

python 复制代码
# 填充缺失值
df.fillna(value=0, inplace=True)

# 删除含有缺失值的行
df.dropna(inplace=True)

2.5. 数据合并和连接

可以将多个 DataFrame 进行合并(横向或纵向)。

python 复制代码
# 纵向合并
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})
merged_df = pd.concat([df1, df2], ignore_index=True)

# 横向连接
df3 = pd.DataFrame({'C': [10, 11], 'D': [12, 13]})
joined_df = df1.join(df3)

2.6. 数据分组与聚合

使用 groupby 方法进行数据分组,并可以对分组后的数据进行聚合操作。

powershell 复制代码
# 按 "department" 分组并计算薪资平均值
grouped_df = df.groupby('department')['salary'].mean()

2.7. 数据排序

可以对数据进行排序,按照某一列或多列的值进行排序。

python 复制代码
# 按照 "age" 列升序排序
sorted_df = df.sort_values(by='age', ascending=True)

2.8. 处理时间序列数据

Pandas 提供了很多处理时间序列数据的功能,如日期的生成、解析、时间范围的生成等。

python 复制代码
# 将字符串转换为 datetime 对象,并作为 DataFrame 的索引
df['date'] = pd.to_datetime(df['date'])
df.set_index('date', inplace=True)

总结:

以上只是pandas的一些简单的应用,实际pandas的功能远不止于此,对于有兴趣的朋友可以继续深入了解pandas的应用。 Pandas 的一些关键特性和功能的总结。

核心数据结构

Series:一维带标签数组,能够保存任意数据类型(整数、字符串、浮点数、Python 对象等)。

DataFrame:二维标签数据结构,类似于 SQL 表格或 Excel 表单。它由多种类型的列构成。

数据输入/输出

支持多种格式的数据读取和写入,如 CSV、Excel、JSON、HTML 和 SQL 数据库。提供简洁的代码来导入和导出数据。

数据查看与检索

通过 head(), tail(), describe() 等方法方便地查看数据摘要。

可以通过索引、名称进行切片和筛选操作。

数据处理

索引、选择与过滤:涵盖数据标签和整数索引访问。

数据清洗:

便于识别和过滤缺失数据或基于其他准则进行数据选择。

数据合并与连接:支持多种方式将多个 DataFrame 和 Series 组合或连接。

数据透视表功能:对数据集进行透视和汇总。

数据聚合和分组操作

通过 groupby 功能实现数据分组后进行汇总、转换和过滤。

时间序列分析

支持日期范围生成、频率转换、日期移动等操作。

适用于时间序列数据的统计和绘图。

数据清洗和准备

提供多种数据类型转换的能力。

支持对文本数据进行正则表达式处理。

性能和效率

底层编写有大量优化的 Cython 代码。

功能扩展性强,很好地与其他库(如 NumPy 和 Matplotlib)整合。

数据可视化与 Matplotlib 集成,可以方便地创建各种图表来可视化数据。

使用场景

数据分析、数据科学、机器学习、金融分析等领域的数据处理和数据清洗。

适用于从小型到大型、复杂数据集的多样化数据操作。

可以与其他流行的 Python 数据科学库,如 Scikit-learn、Statsmodels 和 TensorFlow 结合使用。

总之,Pandas 是数据科学领域广泛使用的必备工具,它提供了数据处理和分析所需的一切基础设施,使得数据分析更加直观和高效。

相关推荐
belldeep2 小时前
python:reportlab 将多个图片合并成一个PDF文件
python·pdf·reportlab
dengqingrui1233 小时前
【树形DP】AT_dp_p Independent Set 题解
c++·学习·算法·深度优先·图论·dp
我的心永远是冰冰哒3 小时前
ad.concat()学习
学习
ZZZ_O^O3 小时前
二分查找算法——寻找旋转排序数组中的最小值&点名
数据结构·c++·学习·算法·二叉树
FreakStudio5 小时前
全网最适合入门的面向对象编程教程:56 Python字符串与序列化-正则表达式和re模块应用
python·单片机·嵌入式·面向对象·电子diy
slomay5 小时前
关于对比学习(简单整理
经验分享·深度学习·学习·机器学习
丶21365 小时前
【CUDA】【PyTorch】安装 PyTorch 与 CUDA 11.7 的详细步骤
人工智能·pytorch·python
hengzhepa5 小时前
ElasticSearch备考 -- Async search
大数据·学习·elasticsearch·搜索引擎·es
_.Switch6 小时前
Python Web 应用中的 API 网关集成与优化
开发语言·前端·后端·python·架构·log4j
一个闪现必杀技6 小时前
Python入门--函数
开发语言·python·青少年编程·pycharm