Python Pandas 中的数据结构详解

Python Pandas 中的数据结构详解

什么是 Pandas

Pandas 是一个强大、灵活、高效的数据分析工具,尤其是在处理大型数据集时,Pandas 的表现十分出色。它主要用于处理带标签的数组(Series)和表格(DataFrame)数据,完美地结合了 NumPy 和 SQL 功能,为数据分析提供了诸多易用的函数和方法。

Pandas 中的两种主要数据结构

Series

Series 是一个类似于数组的一维数据结构,由一组数据和与之相关的标签(即索引)组成。与 Python 中的列表、元组等容器不同,Series 可以存储任意数据类型,包括整数、浮点数、字符串和对象等。

创建 Series

我们可以通过多种方式创建 Series,例如使用 Python 列表、字典等。

import pandas as pd

# 用列表创建 Series
s1 = pd.Series([1, 3, 5, 7])
print(s1)

# 用字典创建 Series
s2 = pd.Series({'a': 1, 'b': 3, 'c': 5, 'd': 7})
print(s2)

DataFrame

DataFrame 是一个二维表格数据结构,由多个带标签的列构成,每一列可以包含不同的数据类型。类似于关系型数据库中的表格,DataFrame 可以对数据进行增、删、改、查等操作。

创建 DataFrame

我们可以通过多种方式创建 DataFrame,例如使用 Python 字典、列表等。

# 用字典创建 DataFrame
df1 = pd.DataFrame({'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 30, 35], 'City': ['Beijing', 'Shanghai', 'Guangzhou']})
print(df1)

# 用列表创建 DataFrame
data = [['Alice', 25, 'Beijing'], ['Bob', 30, 'Shanghai'], ['Charlie', 35, 'Guangzhou']]
columns = ['Name', 'Age', 'City']
df2 = pd.DataFrame(data, columns=columns)
print(df2)

索引和切片

Pandas 中的索引和切片操作与 Python 原生的列表、字典等容器类似,但有些许不同,需要注意。

Series 索引和切片

索引

我们可以使用整数或标签索引 Series,也可以使用切片索引,但需要注意末尾元素是否包含在内。

s = pd.Series([1, 3, 5, 7, 9], index=['a', 'b', 'c', 'd', 'e'])

# 整数索引
print(s[0])

# 标签索引
print(s['b'])

# 切片索引
print(s[1:4])  # 左闭右开,不包含 'd'

切片

对于 Series,切片索引的结果仍然是一个 Series,而非单个元素,因此需要注意返回值的类型。

s = pd.Series([1, 3, 5, 7, 9], index=['a', 'b', 'c', 'd', 'e'])

# 整数切片
print(s[1:4])  # 返回一个中间部分的 Series

# 标签切片
print(s['b':'d'])  # 返回一个标签范围内的 Series(包含末尾元素)

DataFrame 索引和切片

索引

我们可以使用整数或标签索引 DataFrame,分别对应行和列的索引。需要注意的是,使用整数索引时,默认按行进行索引。

df = pd.DataFrame({'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 30, 35], 'City': ['Beijing', 'Shanghai', 'Guangzhou']})

# 按列名索引
print(df['Name'])

# 按行索引
print(df.loc[0])  # 使用 loc 按标签索引行
print(df.iloc[0])  # 使用 iloc 按整数索引行

切片

对于 DataFrame,我们可以使用 loc 和 iloc 实现不同的切片功能。需要注意的是,loc 切片时,切片左右都包含在内,而 iloc 则右侧不包含。

df = pd.DataFrame({'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 30, 35], 'City': ['Beijing', 'Shanghai', 'Guangzhou']})

# 按行切片(loc)
print(df.loc[0:1])  # 左右都包含

# 按行切片(iloc)
print(df.iloc[0:2])  # 左包含,右不包含

# 按列切片
print(df.loc[:, 'Name':'Age'])  # 指定列名范围

示例:对股票数据的处理

为了演示 Pandas 的强大功能,我们以股票数据为例,对其进行处理。

数据准备

我们从 Yahoo Finance 上下载 AAPL(苹果公司) 的历史数据,并保存为 CSV 文件。数据包含日期、开盘价、最高价、最低价、收盘价和成交量等信息。

读取数据

我们使用 Pandas 的 read_csv 函数读取 CSV 文件,并将日期列作为索引。

import pandas as pd

df = pd.read_csv('AAPL.csv', index_col='Date')
print(df.head())  # 查看前 5 行

数据清洗

在开始数据分析之前,我们需要对数据进行清洗和预处理。具体来说,我们需要完成以下任务:

  1. 将日期列转换为 Pandas 中的 Datetime 类型。
  2. 删除缺失数据。
  3. 添加新列(收益率、涨跌)。

首先,我们将日期列转换为 Pandas 中的 Datetime 类型,并按日期进行排序。

df.index = pd.to_datetime(df.index)  # 将日期列转换为 Datetime 类型
df.sort_index(inplace=True)  # 按索引排序

其次,我们删除缺失数据,对于缺失的数据,我们可以使用一些方法进行填充,例如使用上一条数据进行填充(ffill)、使用均值进行填充等。这里我们选择直接删除缺失数据,以保证数据的准确性。

df.dropna(inplace=True)  # 删除缺失数据

最后,我们添加两列新数据:收益率(Return)和涨跌(Change)。其中,收益率表示当天收盘价与前一天收盘价之间的变化率,涨跌表示收益率的正负。

df['Return'] = (df['Close'] - df['Close'].shift(1)) / df['Close'].shift(1) * 100  # 计算收益率
df['Change'] = df['Return'].apply(lambda x: '涨' if x >= 0 else '跌')  # 计算涨跌
df.dropna(inplace=True)  # 删除包含缺失数据的行

数据分析

有了清洗后的数据,我们可以开始进行数据分析了。根据需求,我们可以分析出以下几个指标:

  1. 每年股票价格的平均值、最大值、最小值和标准差。
  2. 每周股票收盘价涨跌情况的统计。

按年统计

为了按年统计股票价格指标,我们可以使用 Pandas 的 groupby 方法,将数据按年分组,然后分别计算每年的平均值、最大值、最小值和标准差。

yearly = df.groupby(df.index.year).agg({'High': 'max', 'Low': 'min', 'Close': ['mean', 'std']})
yearly.columns = ['High_Max', 'Low_Min', 'Close_Mean', 'Close_Std']  # 修改多重列索引名称
print(yearly)

按周统计

为了按周统计股票收盘价涨跌情况,我们可以使用 Pandas 的 resample 方法,将数据按周进行重采样,然后使用 value_counts 方法统计涨跌情况。

weekly = df.resample('W').last()['Change']  # 重采样为周,保留最后一天的收盘价
weekly_count = weekly.value_counts()  # 统计涨跌次数
print(weekly_count)

总结

Pandas 是一个强大、灵活、高效的数据分析工具,它提供了多种数据结构和函数,使得数据分析变得更加简单、快速、方便。本文介绍了 Pandas 中的两种主要数据结构:Series 和 DataFrame,以及索引和切片、数据清洗、数据分析等方面的知识。通过实例的介绍,我们可以更好地理解 Pandas 的用法和优势,为日后的数据分析工作奠定基础。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python Pandas 中的数据结构详解 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • 在pandas多重索引multiIndex中选定指定索引的行方法

    在pandas多重索引MultiIndex中选定指定索引的行有多种方法,下面分别进行详细讲解。 方法一:用tuple定位指定行 在多重索引中,每一维度的索引可以用tuple来表示,所以可以用tuple定位指定行。假设有一个多重索引如下所示: >>> import pandas as pd >>> index = pd.Mu…

    python 2023年6月13日
    00
  • Pandas 嵌套字典到多指标数据框架

    Pandas 是一个极为常用的 Python 数据处理库,常常用于数据清洗、处理和分析。其中,嵌套字典转换成多指标数据框架是 Pandas 的常见应用之一,因此本文将详细讲解 Pandas 嵌套字典转换成多指标数据框架的完整攻略,并提供实例说明。 嵌套字典到多指标数据框架的转换 嵌套字典是一种字典嵌套字典的数据结构,其中嵌套的字典代表多个数据指标,如下所示:…

    python-answer 2023年3月27日
    00
  • python pandas dataframe 行列选择,切片操作方法

    下面是关于Python Pandas DataFrame 行列选择、切片操作方法的详细攻略: 1. DataFrame行列选择 1.1 按列选择 DataFrame 表示的是一张表格,而表格中的每一列都有自己的列名,我们可以通过列名来选择需要的列,所以按列选择的方法是最常用的,示例如下: import pandas as pd # 创建一个包含 4 列的 D…

    python 2023年5月14日
    00
  • 使用applymap()突出显示Pandas DataFrame的特定列

    使用applymap()函数可以很方便地对Pandas DataFrame进行元素级别的操作。如果我们需要突出显示某个特定列的数据,可以通过使用applymap()函数来达到目的。下面提供详细的攻略和示例: 1. 创建DataFrame 首先,我们需要创建一个包含多列数据的DataFrame作为示例: import pandas as pd data = {…

    python-answer 2023年3月27日
    00
  • 详解pycharm2020.1.1专业版安装指南(推荐)

    详解PyCharm 2020.1.1专业版安装指南 如果你是一名Python开发者,那么PyCharm是一个非常优秀的IDE选择。本文将为大家详细介绍PyCharm 2020.1.1专业版的安装指南。 第一步:下载安装包 首先,你需要从官方网站上下载PyCharm 2020.1.1安装包,可以通过下面的链接获得: https://www.jetbrains.…

    python 2023年6月13日
    00
  • 使用熔化和未熔化重塑Pandas数据框架

    使用 Pandas 数据框架时,我们有时需要对数据进行重塑以满足不同的业务需求。其中,熔化和未熔化重塑是两种常见的操作。 熔化重塑 熔化重塑是指将一张宽表转化为一张长表的操作,即将表格中的列转换为行,同时将其它列的数据也跟随转换为行。在 Pandas 中,我们可以使用 melt() 方法来进行熔化重塑。 以下是一个 sales 表格的例子: sales = …

    python-answer 2023年3月27日
    00
  • pandas 数据索引与选取的实现方法

    pandas数据索引与选取的实现方法 pandas是一个非常流行的用于数据分析的Python库,它提供了一系列方便快捷的数据索引和选取方法。本文将详细介绍这些方法。 1. 索引 pandas的数据索引是一种用于标记、引用和提取数据的方法。pandas支持两种主要类型的索引:行索引和列索引。 1.1 行索引 行索引是用于标记和引用数据行的一种索引方式。在pan…

    python 2023年5月14日
    00
  • 关于Pyinstaller闪退的补救措施

    关于Pyinstaller闪退的补救措施,我们可以从以下几方面入手: 1. 使用Pyinstaller命令行参数 Pyinstaller是一款将Python代码打包成独立可执行文件的工具,通常情况下,使用 -F 参数即可将代码打包成单个可执行文件。但是,如果你的代码中使用了某些第三方库或资源文件,那么就需要使用一些额外的参数来指定这些文件,并将其打包进可执行…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部