网站首页 > 博客文章 正文
在前几节课中,我们学习了如何使用 Pandas 进行数据操作和可视化。在这一课中,我们将进一步探索一些高级的数据操作技巧,包括数据透视、分组聚合、时间序列处理以及高级索引和切片。
高级索引和切片
高级索引
Pandas 提供了强大的索引功能,可以让我们轻松地访问和操作数据。
布尔索引
import pandas as pd
# 创建一个简单的 DataFrame
df = pd.DataFrame({
'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, 30, 35, 40],
'City': ['New York', 'Los Angeles', 'Chicago', 'Houston']
})
# 使用布尔索引选择年龄大于 30 的人
filtered_df = df[df['Age'] > 30]
print(filtered_df)
Name Age City
2 Charlie 35 Chicago
3 David 40 Houston
切片和切片
# 使用切片选择特定范围的行和列
subset_df = df[1:3, 0:2] # 选择第 2 行到第 3 行,第 1 列到第 2 列
print(subset_df)
位置索引
# 使用位置索引选择特定行和列
row_at_index_2 = df.iloc[1] # 选择第 2 行
print(row_at_index_2)
column_at_index_1 = df.iloc[:, 0] # 选择第 1 列
print(column_at_index_1)
Name Bob
Age 30
City Los Angeles
Name: 1, dtype: object
0 Alice
1 Bob
2 Charlie
3 David
Name: Name, dtype: object
标签索引
# 使用标签索引选择特定行和列
row_at_label_Bob = df.loc[df['Name'] == 'Bob'] # 选择 'Name' 为 'Bob' 的行
print(row_at_label_Bob)
column_at_label_Age = df.loc[:, 'Age'] # 选择 'Age' 列
print(column_at_label_Age)
Name Age City
1 Bob 30 Los Angeles
0 25
1 30
2 35
3 40
Name: Age, dtype: int64
高级切片
Pandas 还支持更复杂的切片操作,如基于条件的切片。
基于条件的切片
# 使用条件表达式进行切片
filtered_df = df[(df['Age'] > 25) & (df['City'] == 'Chicago')]
print(filtered_df)
Name Age City
2 Charlie 35 Chicago
分组聚合
分组聚合
Pandas 的 groupby() 方法允许我们对数据集进行分组,并对每个组进行聚合操作。
聚合函数
import pandas as pd
# 创建一个简单的 DataFrame
df = pd.DataFrame({
'Category': ['A', 'A', 'B', 'B', 'C'],
'Value': [10, 20, 30, 40, 50]
})
# 使用 groupby() 方法按 'Category' 列分组,并计算每个组的平均值
grouped_df = df.groupby('Category').mean()
print(grouped_df)
Value
Category
A 15.0
B 35.0
C 50.0
自定义聚合函数
# 定义一个自定义聚合函数
def custom_aggregate(values):
return sum(values) / len(values)
# 使用 groupby() 方法按 'Category' 列分组,并使用自定义聚合函数
grouped_df_custom = df.groupby('Category').agg(custom_aggregate)
print(grouped_df_custom)
Value
Category
A 15.0
B 35.0
C 50.0
时间序列处理
时间序列数据处理
Pandas 提供了强大的时间序列处理功能,可以处理日期和时间数据。
创建时间序列
import pandas as pd
# 创建一个日期范围
dates = pd.date_range('2020-01-01', periods=100)
# 创建一个时间序列 DataFrame
ts_df = pd.DataFrame({
'Date': dates,
'Value': np.random.randn(100)
})
print(ts_df)
Date Value
0 2020-01-01 2.032894
1 2020-01-02 -1.208483
2 2020-01-03 -0.532763
3 2020-01-04 2.169684
4 2020-01-05 0.580246
.. ... ...
95 2020-04-05 0.254223
96 2020-04-06 0.461171
97 2020-04-07 0.282761
98 2020-04-08 0.091264
99 2020-04-09 0.464295
[100 rows x 2 columns]
时间序列操作
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 创建一个日期范围
dates = pd.date_range('2020-01-01', periods=100)
# 创建一个时间序列 DataFrame,并将日期设置为索引
ts_df = pd.DataFrame({
'Value': np.random.randn(100)
}, index=dates)
# 确保 'Value' 列是数值类型
ts_df['Value'] = ts_df['Value'].astype(float)
# 时间序列频率转换
ts_df_quarterly = ts_df.resample('Q').mean() # 转换为季度数据
ts_df_monthly = ts_df.resample('M').sum() # 转换为月度数据
# 移动平均
ma_20 = ts_df['Value'].rolling(window=20).mean()
# 绘制时间序列图
plt.figure(figsize=(12, 6))
plt.subplot(2, 1, 1)
plt.plot(ts_df.index, ts_df['Value'], label='Original Data')
plt.legend()
plt.subplot(2, 1, 2)
plt.plot(ma_20.index, ma_20, label='Moving Average (20 days)', color='red')
plt.legend()
plt.show()
练习题
- 使用 Pandas 创建一个包含日期和温度的 DataFrame,并将其转换为时间序列对象。
- 如何使用 Pandas 进行日期和时间的格式化和解析
猜你喜欢
- 2025-08-05 Python 数据分析实例——生存分析
- 2025-08-05 CBN丨China’s industrial profits continue to improve in October
- 2025-08-05 [机器学习] Yellowbrick使用笔记1-快速入门
- 2025-08-05 Pandas之十二速查手册(推荐打印)
- 2025-08-05 CBN丨Most Chinese provinces aim to achieve at least 5% GDP growth in 2025
- 2025-08-05 Pandas:让你像写SQL一样做数据分析
- 2025-08-05 概率分布,贝叶斯神经网络python开发程序包pyro教程和使用指南
- 2025-08-05 AI工程师跃迁指南:10个必学经典算法代码详解+模型调优修炼
- 2025-08-05 【机器学习】数据挖掘神器LightGBM详解(附代码)
- 2025-08-05 《pandas库(数据处理)》
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- googlecloud (64)
- flutterrun (59)
- powershellfor (73)
- messagesource (71)
- plsql64位 (73)
- vueproxytable (64)
- npminstallsave (63)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- nacos启动失败 (64)
- ssh-add (70)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- qcombobox样式表 (68)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)