前言:

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

1 DataFrame和 Series的用法

DataFrame 是 Pandas 库中另一个基本的数据结构。DataFrame 可以看作是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame 既有行索引也有列索引,它可以被看作是由 Series 组成的字典(共用同一个索引)。
Pandas中的Series对象是一种带有标签数据的一维数组,标签在Pandas
中有对应的数据类型"Index", Series类似于一维数组与字典的结合。

1.1 创建一个 DataFrame 的示例:

#!/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 数据:

#!/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的创建

#!/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 索引和切片

# 使用索引访问数据
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 处理缺失值

#!/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 之间的算数运算,包括加、减、乘、除等,并且会自动根据索引对齐数据。

#!/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 数据描述和统计

#!/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 等。

#!/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 数据查看和简单统计

# 查看前5行数据
print(df.head())

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

2.3 数据筛选和过滤

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

# 选择 "age" 列大于 30 的行
filtered_df = df[df['age'] > 30]

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

2.4. 缺失数据处理

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

# 填充缺失值
df.fillna(value=0, inplace=True)

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

2.5. 数据合并和连接

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

# 纵向合并
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 方法进行数据分组,并可以对分组后的数据进行聚合操作。

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

2.7. 数据排序

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

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

2.8. 处理时间序列数据

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

# 将字符串转换为 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 是数据科学领域广泛使用的必备工具,它提供了数据处理和分析所需的一切基础设施,使得数据分析更加直观和高效。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐