深入Pandas(二):高级数据处理技巧

系列文章目录

Python数据分析全攻略
深入Pandas: 数据分析的强大工具

所有的代码资源包括说明文档均上传至资源,可在文章顶部免费下载!!!

引言

在我们上一篇关于Pandas的博客中,我们已经浏览了这一强大Python数据分析库的基础特性和初级数据处理功能。我们了解到,Pandas以其直观的数据结构和简洁的数据操作流程,为数据科学家和分析师提供了一个极其有效的工具。然而,Pandas的真正魅力远不止于此。对于那些已经熟悉了Pandas基础功能的读者来说,更深层次的探索将揭开Pandas高级数据处理和分析能力的神秘面纱。

在这篇博客中,我们将深入探讨Pandas的高级功能,包括复杂数据的合并与重塑、高级索引技巧、以及高级数据分析技术。此外,我们还将着重介绍如何利用Pandas进行高效的时间序列分析,并通过数据可视化技术将这些分析结果生动呈现。本篇内容旨在为那些希望提升自己在Pandas应用能力上的读者提供实用的指导和灵感。

时间序列分析可视化示例

在这里插入图片描述

高级数据分析技术

分组与聚合操作

Pandas的groupby功能非常强大,它允许按照某些条件将数据分组,并对每组数据进行聚合操作。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 创建一个包含多列的DataFrame
df = pd.DataFrame({
    'Date': pd.date_range(start='2023-01-01', periods=100, freq='D'),
    'Category': np.random.choice(['Electronics', 'Clothing', 'Furniture'], 100),
    'Region': np.random.choice(['North', 'South', 'East', 'West'], 100),
    'Sales': np.random.randint(100, 1000, size=100)
})

# 使用groupby进行分组,按照'Category'和'Region'列
grouped = df.groupby(['Category', 'Region'])

# 对每组数据进行多种聚合操作
agg_df = grouped['Sales'].agg([np.sum, np.mean, np.count_nonzero])

# 设置画布大小
plt.figure(figsize=(18, 6))

# 第一个图表:销售总额
plt.subplot(1, 3, 1)  # 1行3列,第1个
agg_df['sum'].unstack().plot(kind='bar', ax=plt.gca())
plt.title('Total Sales by Category and Region')
plt.ylabel('Total Sales')

# 第二个图表:销售平均值
plt.subplot(1, 3, 2)  # 1行3列,第2个
agg_df['mean'].unstack().plot(kind='bar', colormap='viridis', ax=plt.gca())
plt.title('Average Sales by Category and Region')
plt.ylabel('Average Sales')

# 第三个图表:销售次数
plt.subplot(1, 3, 3)  # 1行3列,第3个
agg_df['count_nonzero'].unstack().plot(kind='bar', colormap='coolwarm', ax=plt.gca())
plt.title('Number of Sales by Category and Region')
plt.ylabel('Sales Count')

plt.tight_layout()  # 调整子图布局
plt.show()

分组与聚合

时间序列分析

Pandas提供了强大的时间序列处理能力,包括日期范围生成、频率转换、窗口函数等。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 生成两个时间序列数据
ts1 = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
ts2 = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))

# 累计和
ts1_cumsum = ts1.cumsum()
ts2_cumsum = ts2.cumsum()

# 重采样并计算均值
ts1_resampled = ts1.resample('M').mean()
ts2_resampled = ts2.resample('M').mean()

# 使用滚动窗口计算(例如:窗口大小为50)
roll_mean = ts1.rolling(window=50).mean()

# 数据可视化
plt.figure(figsize=(12, 8))

# 绘制原始数据
plt.subplot(2, 2, 1)
ts1.plot()
plt.title('Original Time Series 1')

plt.subplot(2, 2, 2)
ts2.plot()
plt.title('Original Time Series 2')

# 绘制累计和
plt.subplot(2, 2, 3)
ts1_cumsum.plot()
ts2_cumsum.plot()
plt.title('Cumulative Sum of Time Series')

# 绘制重采样数据和滚动平均
plt.subplot(2, 2, 4)
ts1_resampled.plot()
roll_mean.plot()
plt.title('Resampled Monthly Mean and Rolling Mean')

plt.tight_layout()
plt.show()

时间序列

高级数据操作

数据合并与重塑

Pandas提供了多种数据合并和重塑的方法,如mergeconcatpivot_table等。

示例:数据合并merge

import pandas as pd

# 创建第一个DataFrame:员工ID、姓名和年龄
df1 = pd.DataFrame({
    'Employee ID': ['001', '002', '003', '004'],
    'Name': ['Alice', 'Bob', 'Charlie', 'David'],
    'Age': [25, 30, 35, 40]
})

# 创建第二个DataFrame:员工ID、部门和工作地点
df2 = pd.DataFrame({
    'Employee ID': ['001', '002', '004', '005'],
    'Department': ['HR', 'Engineering', 'IT', 'Marketing'],
    'Location': ['New York', 'San Francisco', 'Toronto', 'Austin']
})

# 创建第三个DataFrame:部门和部门经理
df3 = pd.DataFrame({
    'Department': ['HR', 'Engineering', 'IT', 'Marketing'],
    'Manager': ['Emma', 'Liam', 'Olivia', 'Noah']
})

# 打印合并前的DataFrame
print("DataFrame 1 (Employee Info):")
print(df1)
print("\nDataFrame 2 (Work Info):")
print(df2)
print("\nDataFrame 3 (Department Info):")
print(df3)

# 使用merge函数合并df1和df2
merged_df1 = pd.merge(df1, df2, on='Employee ID', how='left')

# 打印第一次合并后的DataFrame
print("\nMerged DataFrame 1 and 2:")
print(merged_df1)

# 再次使用merge合并merged_df1和df3
final_merged_df = pd.merge(merged_df1, df3, on='Department', how='left')

# 打印最终合并后的DataFrame
print("\nFinal Merged DataFrame:")
print(final_merged_df)

数据合并merge

示例:数据合并concat
import pandas as pd
import matplotlib.pyplot as plt

# 示例数据集
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                    'B': ['B0', 'B1', 'B2', 'B3'],
                    'C': ['C0', 'C1', 'C2', 'C3'],
                    'D': ['D0', 'D1', 'D2', 'D3']},
                    index=[0, 1, 2, 3])

df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
                    'B': ['B4', 'B5', 'B6', 'B7'],
                    'C': ['C4', 'C5', 'C6', 'C7'],
                    'D': ['D4', 'D5', 'D6', 'D7']},
                    index=[4, 5, 6, 7])

# 使用concat进行数据合并
result = pd.concat([df1, df2])

# 为每个唯一的字符串分配一个唯一的整数
for column in result.columns:
    result[column] = result[column].astype('category').cat.codes

# 可视化合并后的数据
result.plot(kind='bar')
plt.title("Concatenated DataFrames with Numerical Representation")
plt.xlabel("Index")
plt.ylabel("Assigned Value")
plt.show()

数据合并concat

示例:数据重塑 - 透视表
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 创建一个包含日期、产品类别、地区和销售额的DataFrame
data = {
    'Date': pd.date_range(start='2023-01-01', periods=100, freq='D'),
    'Category': np.random.choice(['Electronics', 'Clothing', 'Furniture'], 100),
    'Region': np.random.choice(['North', 'South', 'East', 'West'], 100),
    'Sales': np.random.randint(100, 1000, size=100)
}
df = pd.DataFrame(data)

# 创建透视表
pivot_table = df.pivot_table(values='Sales', index=['Region', 'Category'], aggfunc=[np.sum, np.mean])

# 设置图表的大小
plt.figure(figsize=(12, 8))  

# 绘制图表
pivot_table['sum'].plot(kind='bar', title='Total Sales by Region and Category')
plt.ylabel('Total Sales')

# 调整横坐标标签的角度
plt.xticks(rotation=45)

plt.tight_layout()
plt.savefig('pivot_table.png', format='png')  # 保存图表为图片

# plt.show()  # 显示图表

透视表

高级索引技巧

Pandas支持多级索引(Hierarchical indexing),它允许在一个轴上拥有多个(两个以上)索引级别。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 创建一个带有多级索引的DataFrame
index = pd.MultiIndex.from_tuples([('a', 1), ('a', 2), ('b', 1), ('b', 2), ('a', 3), ('b', 3)], names=['group', 'subgroup'])
df = pd.DataFrame(np.random.randn(6, 2), index=index, columns=['data1', 'data2'])

# 使用groupby和unstack对数据进行处理
grouped = df.groupby(level=0).mean()  # 计算每个主组的平均值
unstacked = df.unstack()  # 将多级索引数据结构转换为宽格式

# 设置画布大小
plt.figure(figsize=(18, 6))

# 第一个图表:主组的平均值
plt.subplot(1, 3, 1)  # 1行3列,第1个
grouped.plot(kind='bar', ax=plt.gca())
plt.title('Mean of data1 and data2 for each group')

# 第二个图表:每个子组的data1数据
plt.subplot(1, 3, 2)  # 1行3列,第2个
unstacked['data1'].plot(kind='bar', ax=plt.gca())
plt.title('Data1 for each subgroup')

# 第三个图表:每个子组的data2数据
plt.subplot(1, 3, 3)  # 1行3列,第3个
unstacked['data2'].plot(kind='bar', ax=plt.gca())
plt.title('Data2 for each subgroup')

# 显示图表
plt.tight_layout()
plt.show()

高级索引

结论

通过本篇的学习,相信读者对Pandas的高级功能有了更深的了解和掌握。Pandas的高级数据处理和分析功能,使得处理复杂数据变得更加简单高效。无论是数据科学家、分析师还是Python开发者,掌握这些高级技巧都将大大提升工作效率和分析能力。

Pandas的高级功能不仅限于本文所述,它还有许多其他强大的功能等待探索。希望读者能够在实践中不断发掘Pandas的潜力,并将其应用于各自的数据分析任务中。

  • 47
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: Pandas数据分析100例PDF是一本Python数据科学编程教程,以实例为基础,展示了使用Pandas进行数据清洗、数据分析和数据可视化的常见场景。本书包含100个实例,覆盖了数据输入、数据清洗、数据处理数据可视化全过程。每个实例都提供了完整的代码和输出结果,帮助读者理解Pandas数据分析的核心概念和使用。 这本教程非常适合想要深入学习Pandas数据分析的初学者。在这本书中,读者将学习如何通过Pandas库导入不同的数据源,包括文本文件、电子表格、数据库和网络API等。读者还将学习如何在Pandas中对数据进行清洗和预处理,包括处理缺失值、重复数据和异常数据。此外,本书还提供了很多常用的数据分析技巧,例如分组、聚合和透视表等。 除此之外,这本教程还涵盖了数据可视化,利用Matplotlib和Seaborn库实现了许多图表和可视化工具。通过这些实例,读者可以深入学习Pandas数据分析和Python编程技巧,为日后的工作和学习打下坚实的基础。总体来说,这本书十分实用,对Python数据科学编程入门者具有很好的启示作用。 ### 回答2: Pandas 数据分析100例 PDF 是一本非常有用的数据分析指南,它涵盖了很多实用的案例和示例,其中大量的代码和详细的解释可以帮助读者轻松入门 Pandas 数据分析技术。 在这本 PDF 中,读者将学习到如何使用 Pandas 处理各种类型的数据,包括 CSV、Excel、SQL 数据库等数据源。读者还将学习到如何使用 Pandas 的 DataFrame 和 Series 数据结构,以及如何使用各种数据操作方法对数据进行清洗、处理和分析。 这本 PDF 中的所有案例都非常实用,涵盖了许多数据分析场景,如数据合并、数据聚合、数据过滤、数据可视化等,读者可以通过学习这些案例来掌握 Pandas 的核心技术。在学习过程中,读者不仅能够掌握 Pandas ,还能够提高自己的数据分析能力,为今后的工作打下基础。 总之,Pandas 数据分析100例 PDF 是一本非常实用的数据分析指南,适合数据分析入门者和中级人士阅读。这本 PDF 中的案例和示例非常丰富,能够帮助读者从基础到高级的掌握 Pandas 的核心技术,掌握数据分析的核心思想。如果你想快速学习和提高自己的数据分析技术,这本 PDF 是必读之书。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

跑起来总会有风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值