Pandas:数据结构

在 Python 的数据分析和科学计算中,Pandas 库提供了几个核心数据结构,主要是 Series 和 DataFrame。这两个数据结构是处理和分析数据的基础,具有强大的灵活性和功能。接下来,我将详细介绍这两个数据结构的特点、用法以及一些常见操作。同时对multiIndex数据结构做简单介绍。

一、 Series

Series是 Pandas 库中的一种核心数据结构,它提供了一种灵活而高效的一维数组,可以存储任意类型的数据(如数值、字符串、Python 对象等),并且为这些数据提供标签(索引)。

1. 基本特性

        一维数据结构:Series 是一维的,可以将其理解决为由数据和对应索引的组合。
        索引:每个元素都有一个与之对应的索引,可以是整数(默认)或任何其他对象(如字符串)。
        数据类型:可以存储多种数据类型,支持数字、字符串、日期等。
        灵活性:用户可以轻松地修改索引和数据。

2. 创建 Series

Series 可以通过多种方式创建,主要有以下几种:

2.1 从列表或数组创建
import pandas as pd  

# 使用列表创建 Series  
s1 = pd.Series([10, 20, 30, 40])  
print(s1)
2.2 指定索引
# 使用指定索引创建 Series  
s2 = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])  
print(s2)
2.3 从字典创建
# 使用字典创建 Series  
data = {'a': 1, 'b': 2, 'c': 3}  
s3 = pd.Series(data)  
print(s3)

 3. Series属性:index、values

4. 基本操作

访问元素:
        通过整数索引访问: `s[0]`
        通过标签索引访问: `s['a']`

print(s1[0])  # 输出: 10  
print(s2['b']) # 输出: 2

切片操作:可以使用切片语法来获取部分数据。

print(s1[1:3])  # 输出: 20, 30

修改元素:

s1[0] = 100  
print(s1)  # 输出: 100, 20, 30, 40

统计方法:可以调用多个统计函数,如均值、和、方差等。

print(s1.mean())  # 计算均值  
print(s1.sum())   # 计算总和

5. 常用方法

排序:可以对 Series 进行排序。

sorted_series = s1.sort_values()  
print(sorted_series)

条件过滤:可以基于条件筛选元素。

filtered_series = s1[s1 > 20]  
print(filtered_series)

缺失值处理:可以使用方法处理缺失值,如填充或删除缺失值。

s4 = pd.Series([1, 2, None, 4])  
print(s4.fillna(0))  # 用 0 填充缺失值

6. 应用场景

        数据分析:在数据分析中,Series 经常用于处理一维数据列,如 CSV 文件的某一列。
        时间序列数据:Series 也非常适合用于时间序列数据存储,配合日期索引,可以方便地进行时间序列分析。

二、 DataFrame

DataFrame是 Pandas 库中用于处理和分析数据的核心数据结构之一。它是一个二维的、带标签的表格数据结构,具有行和列的概念,类似于电子表格或 SQL 数据表。DataFrame 的灵活性和功能使其成为数据科学和分析领域的基础工具之一。

1. 基本特性

        二维结构:DataFrame 由行和列组成,其中行表示不同的观测值,列表示不同的特征或变量。
        标签索引:每一列和每一行都可以通过标签进行访问,允许用户轻松地选择和操作数据。
        支持多种数据类型:DataFrame 的每一列可以包含不同的数据类型(如整数、浮点数、字符串、布尔值等)。
        灵活性和可扩展性:DataFrame 可以从多种数据源创建,如列表、字典、NumPy 数组、CSV 文件、数据库等。

2. 创建 DataFrame

DataFrame 可以通过多种方式创建,以下是几种常用的方法:

2.1 从字典创建
import pandas as pd  

data = {  
    'Name': ['孙权', '刘备', '张飞'],  
    'Age': [24, 27, 22],  
    'Salary': [70000, 80000, 30000]  
}  
df = pd.DataFrame(data)  
print(df)

2.2 从列表或数组创建
data = [['Alice', 24, 70000], ['Bob', 27, 80000], ['Charlie', 22, 30000]]  
df = pd.DataFrame(data, columns=['Name', 'Age', 'Salary'])  
print(df)

2.3 从 CSV 文件创建
df = pd.read_csv('data.csv')  # 从 CSV 文件加载数据

3. 属性 shape、index、colums

4. 基本操作

访问数据:
        按列访问:可以通过列名访问特定列。

ages = df['Age']  
print(ages)

        按行访问:可以使用 `iloc` 和 `loc` 方法按位置或按标签访问行

first_row = df.iloc[0]  # 按位置获取第一行  
print(first_row)

数据切片:可以选择特定的行和列。

subset = df.loc[0:1, ['Name', 'Salary']]  # 选择前两行的 Name 和 Salary 列  
print(subset)

修改数据:可以对 DataFrame 中的数据进行修改。

df.at[0, 'Salary'] = 75000  # 修改第一行的 Salary

5. 常用方法

统计和聚合:可以使用多种统计函数对数据进行分析。

print(df.describe())  # 显示数值型列的描述统计

数据清洗:提供缺失值处理、重复值检查等功能。

df.dropna(inplace=True)  # 删除缺失值所在的行  
df.drop_duplicates(inplace=True)  # 删除重复行

数据筛选:可以根据特定条件过滤 DataFrame。

high_salary = df[df['Salary'] > 50000]  # 筛选薪水大于 50000 的行

分组和聚合:可以根据某列进行分组,并计算聚合统计。

average_salary_by_age = df.groupby('Age')['Salary'].mean()  # 按年龄分组计算平均薪水

6. 应用场景

        数据分析和探索:DataFrame 是进行数据分析、数据清洗和探索性数据分析的常用工具,广泛应用于数据科学项目。
        数据可视化:可以与可视化库(如 Matplotlib、Seaborn)结合使用,方便绘制各种图表。
        机器学习:在机器学习的预处理阶段,DataFrame 可用于准备和清理训练数据。

三、MultiIndex

MultiIndex是 Pandas 的一种高级索引功能,允许用户在 DataFrame 和 Series 中使用多个索引级别。这种结构使得用户能够方便地处理和分析多维数据,尤其是在面对复杂数据集时,如时间序列数据、分组数据或层次化数据。

1. MultiIndex 的基本特性

        多级索引:MultiIndex 允许具有多个级别的行或列索引,使得数据组织更加灵活。
        层次结构:索引可以是多层次的,使得用户能够更清晰地表示数据的嵌套关系。
        便于分组和聚合:可以方便地对不同索引级别的数据进行分组和计算,提高数据分析能力。

 2. 创建 MultiIndex

创建 MultiIndex 有多种方式,主要有以下几种:

2.1 使用for_arrays
import pandas as pd
arrays = [[1, 1, 2, 2], ['red', 'blue', 'red', 'blue']]
color_multiIndex=pd.MultiIndex.from_arrays(arrays,names=['number','colors'])
color_multiIndex

2.2 从元组列表
import pandas as pd  

# 创建层次索引的元组  
index = pd.MultiIndex.from_tuples(  
    [('A', 1), ('A', 2), ('B', 1), ('B', 2)],  
    names=['Category', 'Number']  
)  

# 创建 DataFrame  
df = pd.DataFrame({'Value': [10, 20, 30, 40]}, index=index)  
print(df)
2.3 使用 `pivot_table` 方法**:通过数据透视表创建 MultiIndex。
data = {  
    'Category': ['A', 'A', 'B', 'B'],  
    'Number': [1, 2, 1, 2],  
    'Value': [10, 20, 30, 40]  
}  
df = pd.DataFrame(data)  
pivot_df = df.pivot_table(values='Value', index='Category', columns='Number')  
print(pivot_df)

3. 基本操作

访问数据:使用多级索引时,可以通过层次化标签或位置访问数据。

# 访问特定层次的数据  
print(df.loc['A'])          # 获取所有 Category 为 'A' 的数据  
print(df.xs(1, level='Number'))  # 获取所有 Number 为 1 的数据

切片操作:可以对 MultiIndex 进行切片,获取特定的子集。

print(df.loc['A'].loc[1])  # 访问 Category 为 'A' 及 Number 为 1 的值

4. 常用方法

级别操作:可以获取并设置 index 的级别。

print(df.index.levels)  # 获取每个级别的索引值

重新排序:可以对 MultiIndex 进行排序。

sorted_df = df.sort_index(level='Category')

重塑和汇总:使用 `stack` 和 `unstack` 方法在不同级别之间转换数据结构。

stacked = df.unstack(level='Number')  # 将 'Number' 级别变为列索引  
print(stacked)

5. 应用场景

复杂数据分析:在处理需要多层次分组和汇总的数据时,MultiIndex 提供了强大的工具。
时间序列数据:在时间序列分析中,可以使用多级索引按年、月、日等分层次表示数据。
数据透视与层次化报表:在生成层次化的报告或数据透视表时,MultiIndex 压缩了数据维度,使报告更简洁。

四、总结

Pandas 的 Series 和 DataFrame 是处理和分析数据的核心构件。它们提供了丰富的数据操作方法,使得数据清洗、处理和分析变得简单高效。通过灵活的索引和多样的数据处理功能,Pandas 成为数据分析和科学计算中不可或缺的工具。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

00&00

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

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

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

打赏作者

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

抵扣说明:

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

余额充值