Pandas 数据分析实战

在数据科学和机器学习的世界里,Pandas 是我们的好伙伴!这个功能强大的 Python 库,为我们提供了诸多便利,帮助我们轻松地处理和分析海量数据。今天,就让我们一起探索 Pandas 的奥秘,品味数据分析的乐趣吧!

一、Pandas 数据结构:Series 与 DataFrame

Pandas 提供了两种重要的数据结构:Series 和 DataFrame。它们是 Pandas 的基石,让我们能够灵活地操作数据。

  1. Series

Series 是 Pandas 中的一维数据结构,它由两个主要部分组成:索引(index)和数据(values)。Series 的索引可以是任意类型,如整数、字符串、时间等,而数据则可以是整数、浮点数、字符串等各种数据类型。Series 的索引和数据之间存在一一对应的关系。

Series 数据结构的灵活性使其可以处理各种一维数据,如时间序列数据、一列数据等。此外,Series 支持许多类似于 NumPy 的操作,如数据筛选、切片、聚合等。我们可以通过字典、列表等 Python 数据结构创建 Series。

创建 Series 的例子:

import pandas as pd

# 使用列表创建 Series
data = [1, 2, 3, 4, 5]
s = pd.Series(data)
print(s)

输出:

0    1
1    2
2    3
3    4
4    5
dtype: int64

我们还可以自定义索引:

# 自定义索引
index = ['a', 'b', 'c', 'd', 'e']
s = pd.Series(data, index=index)
print(s)

输出:

a    1
b    2
c    3
d    4
e    5
dtype: int64

pd.Series() 函数用于创建 Series 对象。常用参数如下:

  • data:传入一维数组、列表、字典等作为 Series 的数据。
  • index:用于指定 Series 的索引,默认为 None。如果不指定,系统会自动生成从 0 开始的整数索引。
  • dtype:指定 Series 的数据类型。如果不指定,系统会自动推断。
  • name:给 Series 命名。

示例:

import pandas as pd

data = [1, 2, 3, 4]
index = ['a', 'b', 'c', 'd']
s = pd.Series(data=data, index=index, dtype=int, name='example_series')
  1. DataFrame

DataFrame 是 Pandas 中的二维数据结构,可以看作是由多个 Series 按列组合而成的。DataFrame 由行索引(index)、列索引(columns)和数据(values)三部分组成。行索引和列索引可以是任意类型,如整数、字符串、时间等,数据则可以是整数、浮点数、字符串等各种数据类型。DataFrame 的行索引、列索引和数据之间存在一一对应的关系。

创建 DataFrame 的例子:

# 使用字典创建 DataFrame
data = {'name': ['Alice', 'Bob', 'Cathy', 'David', 'Eva'],
        'age': [25, 30, 35, 40, 45],
        'city': ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen', 'Hangzhou']}
df = pd.DataFrame(data)
print(df)

输出:

    name  age       city
0  Alice   25    Beijing
1    Bob   30   Shanghai
2  Cathy   35  Guangzhou
3  David   40   Shenzhen
4    Eva   45   Hangzhou

pd.DataFrame() 函数用于创建 DataFrame 对象。常用参数如下:

  • data:传入二维数组、列表、字典、Series 等作为 DataFrame 的数据。
  • index:用于指定 DataFrame 的行索引,默认为 None。如果不指定,系统会自动生成从 0 开始的整数索引。
  • columns:用于指定 DataFrame 的列索引,默认为 None。如果不指定,系统会自动生成从 0 开始的整数索引。
  • dtype:指定 DataFrame 的数据类型。如果不指定,系统会自动推断。

示例:

import pandas as pd

data = {
    'col1': [1, 2, 3],
    'col2': [4, 5, 6],
    'col3': [7, 8, 9]
}
index = ['row1', 'row2', 'row3']
columns = ['col1', 'col2', 'col3']

df = pd.DataFrame(data=data, index=index, columns=columns, dtype=int)

我们可以使用 head()tail()shape 等方法查看 DataFrame 的基本信息:

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

# 查看后 2 行数据
print(df.tail(2))

# 查看 DataFrame 的形状(行数和列数)
print(df.shape)

DataFrame 是一个非常强大的数据结构,可以处理各种复杂的二维数据,如表格数据、多列数据等。DataFrame 支持许多高级的数据操作,如数据筛选、排序、分组、合并、透视表等。

Series 和 DataFrame 的设计灵感来源于 R 语言中的数据框(data.frame)概念。它们的设计初衷是为了方便处理各种复杂的数据处理任务,使数据处理变得更加简单、高效。在实际应用中,可以根据数据维度和需求选择使用 Series 或 DataFrame 进行数据处理。

二、Pandas 数据导入与导出

Pandas 支持多种数据格式的导入和导出,如 CSV、Excel、JSON、HTML、HDF5 等。这里,我们主要介绍 Pandas 中常用的 CSV 和 Excel 数据的导入和导出方法。

  1. CSV 数据

CSV(Comma-Separated Values)是一种以逗号分隔的纯文本数据格式,常用于存储表格数据。Pandas 提供了 read_csv()to_csv() 函数来实现 CSV 数据的导入和导出。

导入 CSV 数据:

import pandas as pd

# 读取 CSV 文件
file_path = 'data.csv'
df = pd.read_csv(file_path)

# 显示前 5 行数据
print(df.head())

read_csv()常用参数:

  • filepath_or_buffer:文件路径(字符串)或类文件对象。
  • sep:字段分隔符,默认为逗号 ‘,’。
  • header:指定数据文件中的哪一行作为列名,默认为 0。如果没有列名,可以设置为 None
  • index_col:指定哪一列作为 DataFrame 的索引,默认为 None
  • usecols:指定要导入的列,可以是列名组成的列表,也可以是列索引的整数列表。
  • nrows:指定要读取的行数。
  • skiprows:跳过指定行数后再开始读取数据。
  • encoding:文件编码格式,默认为 ‘utf-8’。

导出 CSV 数据:

# 导出 DataFrame 到 CSV 文件
output_file_path = 'output_data.csv'
df.to_csv(output_file_path, index=False)  # index=False 不保存索引列

to_csv()常用参数:

  • path_or_buf:文件路径(字符串)或类文件对象。
  • sep:字段分隔符,默认为逗号 ‘,’。
  • header:是否写入列名,默认为 True
  • index:是否写入索引列,默认为 True
  • columns:指定要导出的列。
  • encoding:文件编码格式,默认为 ‘utf-8’。
  1. Excel 数据

Excel 是一种常用的电子表格文件格式。Pandas 提供了 read_excel()to_excel() 函数来实现 Excel 数据的导入和导出。需要注意的是,使用这两个函数需要先安装 openpyxlxlrd 库。

安装所需库:

pip install openpyxl xlrd

导入 Excel 数据:

# 读取 Excel 文件
file_path = 'data.xlsx'
df = pd.read_excel(file_path)

# 显示前 5 行数据
print(df.head())

read_excel()常用参数:

  • io:文件路径(字符串)或类文件对象。
  • sheet_name:指定要读取的工作表名称或工作表索引。默认为 0,表示读取第一个工作表。
  • header:指定数据文件中的哪一行作为列名,默认为 0。如果没有列名,可以设置为 None
  • index_col:指定哪一列作为 DataFrame 的索引,默认为 None
  • usecols:指定要导入的列,可以是列名组成的列表,也可以是列索引的整数列表。
  • nrows:指定要读取的行数。
  • skiprows:跳过指定行数后再开始读取数据。

导出 Excel 数据:

# 导出 DataFrame 到 Excel 文件
output_file_path = 'output_data.xlsx'
df.to_excel(output_file_path, index=False)  # index=False 不保存索引列

to_excel()常用参数:

  • excel_writer:文件路径(字符串)或类文件对象。
  • sheet_name:指定要写入的工作表名称,默认为 ‘Sheet1’。
  • header:是否写入列名,默认为 True
  • index:是否写入索引列,默认为 True
  • columns:指定要导出的列。

三、Pandas 数据处理与分析

接下来,让我们一起来看看 Pandas 是如何处理和分析数据的。以下是一些常见的数据操作:

  1. 数据筛选:

Pandas 提供了多种数据选择和筛选方法,如使用 []locilocatiat 等进行数据访问。以下是一些常用函数及其参数:

  • []:使用列名或条件表达式进行数据筛选。
  • loc:基于行、列标签进行数据选择。
  • iloc:基于行、列索引进行数据选择。
  • at:使用行、列标签快速访问单个元素。
  • iat:使用行、列索引快速访问单个元素。
# 筛选年龄大于 25 岁的人
filtered_df = df[df['age'] > 25]
  1. 数据排序:

Pandas 支持对数据进行排序。常用的排序函数是 sort_values()sort_index()

  • sort_values(by, axis=0, ascending=True, inplace=False, na_position='last')

    • by:指定需要排序的列名。
    • axis:指定排序轴(0 表示按行排序,1 表示按列排序)。
    • ascending:指定排序方式(True 表示升序,False 表示降序)。
    • inplace:是否在原 DataFrame 上进行排序。
    • na_position:指定缺失值的位置(‘last’ 表示放在最后,‘first’ 表示放在最前)。
  • sort_index(axis=0, level=None, ascending=True, inplace=False, na_position='last')

    • axisascendinginplacena_position 参数同 sort_values()
    • level:用于多层索引排序时,指定需要排序的索引层级。
# 按年龄排序
sorted_df = df.sort_values(by='age')
  1. 数据清洗

Pandas 提供了许多数据清洗功能,如处理缺失值、重复值、异常值等。以下是一些常用函数及其参数:

  • 处理缺失值:
    • dropna(axis=0, how='any', thresh=None, subset=None, inplace=False):删除含有缺失值的行或列。
      • axisinplace 参数同 sort_values()
      • how:指定删除条件(‘any’ 表示只要有缺失值就删除,‘all’ 表示所有值都是缺失值才删除)。
      • thresh:指定非缺失值的最小数量,低于此数量的行或列将被删除。
      • subset:指定需要考虑的列。
    • fillna(value=None, method=None, axis=None, inplace=False, limit=None):填充缺失值。
      • value:指定用于填充的值。
      • method:指定填充方式(‘ffill’ 表示用前一个值填充,‘bfill’ 表示用后一个值填充)。
      • axisinplace 参数同 sort_values()
      • limit:指定连续缺失值的最大填充数量。
# 丢弃缺失值
df.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)

# 填充缺失值
df.fillna(value=0, method=None, axis=None, inplace=False, limit=None)
  • 处理重复值:
    • duplicated(subset=None, keep='first'):检测重复行。
      • subset:指定需要考虑的列。
      • keep:指定保留哪个重复行(‘first’ 表示保留第一个,‘last’ 表示保留最后一个,False 表示不保留任何重复行)。
    • drop_duplicates(subset=None, keep='first', inplace=False):删除重复行。
      • subsetkeepinplace 参数同 duplicated()
# 检测重复值
duplicates = df.duplicated(subset=None, keep='first')

# 删除重复值
df.drop_duplicates(subset=None, keep='first', inplace=False)
  1. 数据分组与聚合:

Pandas 提供了丰富的数据聚合与统计功能,如 groupby()agg()describe() 等。以下是一些常用函数及其参数:

  • groupby(by=None, axis=0, level=None, sort=True):按照指定条件进行分组。

    • by:指定用于分组的列名或函数。
    • axislevelsort 参数同 sort_index()
  • agg(func=None, axis=0, *args, **kwargs):对分组后的数据应用聚合函数。

    • func:指定用于聚合的函数。
    • axis 参数同 sort_values()
  • describe(percentiles=None, include=None, exclude=None):生成描述性统计信息。

    • percentiles:指定计算的百分位数。
    • include:指定包含的数据类型。
    • exclude:指定排除的数据类型。
# 分组
grouped = df.groupby(by='A', axis=0, level=None, sort=True)

# 聚合函数
result = grouped.agg(func='sum', axis=0)

# 描述性统计信息
description = df.describe(percentiles=None, include=None, exclude=None)
  1. 数据合并:
# 合并两个 DataFrame
data2 = {'name': ['Alice', 'Bob', 'Cathy'],
         'score': [90, 80, 85]}
df2 = pd.DataFrame(data2)
merged_df = pd.merge(df, df2, on='name')

这些只是 Pandas 提供的众多功能中的一部分。在实际应用中,我们可以根据需求灵活运用这些功能,进行数据的清洗、分析和可视化,为我们的数据科学项目提供强大的支持。

四、Pandas 与数据可视化

Pandas 本身提供了一些简单的数据可视化功能,主要依赖于 Matplotlib 库。对于更复杂的可视化需求,可以将 Pandas 的数据结构与其他可视化库(如 Seaborn、Plotly 等)结合使用。以下是一些常用的 Pandas 可视化函数及其参数:

  1. 线形图

DataFrame.plot.line(x=None, y=None, **kwds)

参数:

  • x:指定 x 轴的列名。
  • y:指定 y 轴的列名。

示例:

import pandas as pd
import matplotlib.pyplot as plt

data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data)

df.plot.line()
plt.show()
  1. 柱状图

DataFrame.plot.bar(x=None, y=None, **kwds)

参数:

  • x:指定 x 轴的列名。
  • y:指定 y 轴的列名。

示例:

import pandas as pd
import matplotlib.pyplot as plt

data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data)

df.plot.bar()
plt.show()
  1. 盒图

DataFrame.plot.box(**kwds)

示例:

import pandas as pd
import matplotlib.pyplot as plt

data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data)

df.plot.box()
plt.show()
  1. 散点图

DataFrame.plot.scatter(x, y, s=None, c=None, **kwds)

参数:

  • x:指定 x 轴的列名。
  • y:指定 y 轴的列名。
  • s:指定散点的大小。
  • c:指定散点的颜色。

示例:

import pandas as pd
import matplotlib.pyplot as plt

data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data)

df.plot.scatter(x='A', y='B')
plt.show()

以上只是 Pandas 提供的部分可视化函数,实际上还有很多其他类型的图表,如饼图、直方图等。在实际应用中,可以根据需要选择合适的可视化方法。

import matplotlib.pyplot as plt
import seaborn as sns

# 绘制柱状图,显示每个城市的人数
city_count = df['city'].value_counts()
city_count.plot(kind='bar')
plt.xlabel('城市')
plt.ylabel('人数')
plt.show()

在这个例子中,我们使用 Pandas、Matplotlib 和 Seaborn 绘制了一个柱状图,展示了每个城市的人数。数据可视化让我们能够更直观地理解数据,为我们的数据分析工作提供了有力的支持。

总结:Pandas,数据分析的神奇利器

通过本文的学习,你已经掌握了 Pandas 的核心功能,包括数据结构、数据导入与导出、数据处理与分析以及数据可视化。Pandas 是数据科学家的得力助手,让我们在数据的海洋中畅游自如。希望你能在今后的学习和实践中,不断提高自己的 Pandas 技能,成为数据分析领域的佼佼者!

参考文献:

  1. Pandas 官方文档:https://pandas.pydata.org/docs/
  2. 《Python for Data Analysis》, 作者:Wes McKinney
  3. 《Python 数据科学手册》,作者:Jake VanderPlas
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
你在学习Python数据分析的时候,是否遇到过在这些问题? 别慌!这些都是数据科学入门常见问题。从入门到上手再到解决实际问题,数据科学看似复杂,但如果你掌握了正确的学习方法,完全可以极速入门。 【职场人进阶必备  数据分析/挖掘一点通】 如今的职场上,90%以上的岗位都会涉及数据问题。 以产品文案岗位为例,在一个新产品推向市场之前,文案需要考虑: 此时,可以关注一下市场上已有的相关产品推广数据,如:哪些文案打开率更高?哪些文案转化更好?目标用户的购买习惯如何? 以此作为下一步工作开展的依据,对产品文案工作者来说,可以少走很多弯路。 学会数据分析/挖掘,等于站巨人的肩膀上工作,轻松且高效。 【爬虫、数据分析、数据挖掘知识点三合一】数据问题一网打尽 本课程将知识点悉数融入实战项目,不空谈语法,帮助学员在实践中获取知识,目标是:让学员能自主完成数据采集、数据分析与数据挖掘。 学习完本课程,你可以熟练掌握: 【实战案例超实用,轻松拥有“睡后收入”!】 本课程以股票案例为主线,串联爬虫、数据分析以及数据挖掘多个知识点。 通过实战案例演练,你可以全面掌握股票收益的分析和预判方法,在收获新技能的同时,也有机会获得“睡后收入”! 四大优势: 三重权益:
Pandas是一个开源的数据分析库,提供了高效的数据结构和数据分析工具。它是基于NumPy构建的,可以处理各种类型的数据,包括结构化的数据和时间序列数据。 在进行Pandas数据分析实战时,你可以按照以下步骤进行: 1. 导入Pandas库:在开始之前,需要导入Pandas库。你可以使用以下代码导入Pandas: ```python import pandas as pd ``` 2. 读取数据:使用Pandas的`read_csv()`函数读取数据文件。例如,如果你的数据文件是一个CSV文件,你可以使用以下代码读取: ```python data = pd.read_csv('data.csv') ``` 3. 数据探索:使用Pandas的各种函数和方法来探索数据。你可以使用以下代码查看数据的前几行: ```python data.head() ``` 4. 数据清洗:清洗数据是数据分析的重要步骤之一。你可以使用Pandas的函数和方法来处理缺失值、重复值等。例如,使用以下代码删除重复值: ```python data = data.drop_duplicates() ``` 5. 数据分析:使用Pandas的函数和方法进行数据分析。你可以使用各种统计函数、聚合函数和可视化工具来分析数据。例如,使用以下代码计算某一列的平均值: ```python mean_value = data['column_name'].mean() ``` 6. 数据可视化:使用Pandas和其他可视化库(如Matplotlib和Seaborn)来可视化数据。你可以使用各种图表和图形来展示数据的特征和趋势。例如,使用以下代码绘制柱状图: ```python import matplotlib.pyplot as plt data['column_name'].plot(kind='bar') plt.show() ``` 这些是进行Pandas数据分析实战的基本步骤。当然,具体的分析任务可能会有所不同,你可以根据自己的需求和数据特点进行相应的操作和分析。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

PyTechShare

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

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

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

打赏作者

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

抵扣说明:

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

余额充值