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数据框架进行排序

    按两列或多列对Pandas数据框架进行排序,可以通过sort_values()方法来实现。 sort_values()方法根据一列或多列的值进行排序。 接下来,我将介绍如何在Pandas中使用sort_values()方法对数据框进行排序。 1. 按一列排序 考虑以下数据框: import pandas as pd data = { ‘name’: [‘Je…

    python-answer 2023年3月27日
    00
  • python学习之panda数据分析核心支持库

    Python学习之pandas数据分析核心支持库 简介 pandas是Python中一款强大的数据分析库,需要安装后才能使用。pandas基于NumPy库开发,可轻松处理具有浮点值和标签的数据,其中包括导入、清理、处理、合并、截取、过滤、变换和统计等操作。 安装 在Python环境中,使用pip命令进行安装(需要管理员身份): pip install pan…

    python 2023年5月14日
    00
  • Python Pandas 对列/行进行选择,增加,删除操作

    下面我为你详细讲解Python Pandas对列/行进行选择、增加和删除操作的步骤。 选择操作 列选择 选择单列数据使用中括号 [] 即可,如下例所示: import pandas as pd df = pd.read_csv(‘example.csv’) # 选择 "name" 列数据 name = df[‘name’] print(n…

    python 2023年5月14日
    00
  • Python Pandas – 检查两个共享封闭端点的Interval对象是否重叠

    Python Pandas是一个强大的数据分析库,它提供了丰富的数据处理和分析工具,其中包括对interval对象的支持。在Pandas中,可以使用interval_range()函数来创建interval对象,可以使用overlaps()方法来检查interval对象是否重叠。 要检查两个共享封闭端点的interval对象是否重叠,可以使用overlaps…

    python-answer 2023年3月27日
    00
  • 获取Pandas DataFrame中包含给定子字符串的所有记录

    获取Pandas DataFrame中包含给定子字符串的所有记录的过程可以分为以下几个步骤: 导入Pandas模块以及相关的数据文件 先导入Pandas模块,并读取包含数据的CSV文件,如下所示: import pandas as pd # 读取CSV文件 df = pd.read_csv(‘data.csv’) 利用str.contains()方法查找包含…

    python-answer 2023年3月27日
    00
  • Pandas实现DataFrame的简单运算、统计与排序

    Pandas是一种综合性的数据分析工具,其主要的数据结构是Series和DataFrame。DataFrame是一种类似于Excel表格的数据结构,可以简单地进行运算、统计和排序,因此被广泛地使用。在下文中,我们将讲解如何使用Pandas实现DataFrame的简单运算、统计与排序。 创建DataFrame 首先,我们需要创建一个DataFrame对象。我们…

    python 2023年5月14日
    00
  • Pandas中DataFrame的分组/分割/合并的实现

    Pandas是Python中非常流行的数据分析库,其中的DataFrame是一种类似于电子表格的数据结构。在处理数据时,经常需要针对不同的分组/分割/合并需求进行处理。 分组 按列值分组 DataFrame.groupby()方法可用于按一列或多列的值分组,并执行其他操作。下面是一个示例: import pandas as pd # 创建一个DataFram…

    python 2023年5月14日
    00
  • 在pandas中遍历DataFrame行的实现方法

    在Pandas中遍历DataFrame行的实现方法有以下几种: 使用iterrows(): 使用iterrows()能够返回DataFrame中的每一行,然后使用for循环遍历每一行,对每一行做需要的操作。以下是一个示例代码: import pandas as pd df = pd.read_csv(‘data.csv’) for index, row in…

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