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