趋近智
组织和处理机器学习 (machine learning)中常见的数据集,需要有效的数据结构。NumPy为同构数值数组提供了高效数值运算的强大工具,但数据常常以表格形式呈现,混合多种数据类型(数字、文本、日期),并需要行和列的标签。对于这些复杂的数据需求,Pandas库提供了卓越的能力。
Pandas引入了两种对Python数据分析和处理不可或缺的基本数据结构:Series和DataFrame。这些结构构建在NumPy数组之上,提供增强的灵活性和功能,专门用于处理带标签和关系型数据。可以将它们视为精巧的容器,使数据处理变得直观高效。
Series本质上是一维数组,能够保存任何类型的数据(整数、字符串、浮点数、Python对象等)。与NumPy数组相比,Series的决定性特征是其索引。索引是关联的标签数组,允许您使用这些标签而不是仅通过整数位置来访问数据。
可以将Series想象成电子表格或表中的单列。Series中的每个值在索引中都有一个对应的标签。如果您在创建Series时不指定索引,Pandas会自动创建一个从0到N-1的默认整数索引,其中N是数据的长度。
我们来创建一个简单的Series:
import pandas as pd
import numpy as np
# 从Python列表创建Series
data = [10, 20, 30, 40, 50]
s = pd.Series(data)
print(s)
Output:
0 10
1 20
2 30
3 40
4 50
dtype: int64
请注意,输出显示了两列:左侧是索引(0到4),右侧是对应的值。dtype: int64表示Series中存储值的数据类型。
我们也可以创建一个带有自定义索引的Series:
# 使用自定义标签创建Series
population = {'California': 39538223, 'Texas': 29145505,
'Florida': 21538187, 'New York': 20201249}
pop_series = pd.Series(population, name='State Population') # 给Series命名
print(pop_series)
Output:
California 39538223
Texas 29145505
Florida 21538187
New York 20201249
Name: State Population, dtype: int64
这里,州名用作索引标签。您可以使用.values属性访问底层的NumPy数组,并使用.index属性访问索引对象。
print("值:", pop_series.values)
print("索引:", pop_series.index)
Output:
Values: [39538223 29145505 21538187 20201249]
Index: Index(['California', 'Texas', 'Florida', 'New York'], dtype='object')
Series提供了一个强大的根基,它既像NumPy数组(支持矢量化 (quantization)操作),又像Python字典(将索引标签映射到值)。
Series表示单列数据,而DataFrame表示完整的表格或电子表格。它是一个二维的、大小可变的、可能异构的表格数据结构,带有标签的轴(行和列)。您可以将DataFrame视为:
DataFrame是Pandas的主力,也是您在执行数据分析和机器学习 (machine learning)模型准备时最常打交道的结构。
我们来使用字典创建一个DataFrame,其中键成为列标签,列表成为列数据:
# 从列表字典创建DataFrame
data = {'State': ['California', 'Texas', 'Florida', 'New York'],
'Population': [39538223, 29145505, 21538187, 20201249],
'Area (sq mi)': [163696, 268597, 65758, 54556]}
states_df = pd.DataFrame(data)
print(states_df)
Output:
State Population Area (sq mi)
0 California 39538223 163696
1 Texas 29145505 268597
2 Florida 21538187 65758
3 New York 20201249 54556
与Series一样,如果没有指定索引,Pandas会创建一个默认的整数索引。我们可以在创建时使用index参数 (parameter)指定自定义行标签,或者使用.set_index()方法将现有列设置为索引(我们将在后面介绍)。
您可以分别使用.index和.columns属性访问行标签(索引)和列标签。底层数据通常表示为NumPy数组(如果数据类型跨列不同,则为多个数组),可以通过.values属性访问,尽管直接操作通常通过Pandas方法进行。
print("索引:", states_df.index)
print("列:", states_df.columns)
# print(states_df.values) # 输出是数据的NumPy数组
Output:
Index: RangeIndex(start=0, stop=4, step=1)
Columns: Index(['State', 'Population', 'Area (sq mi)'], dtype='object')
DataFrame中的每一列都是一个Series:
# 访问列会返回一个Series
population_col = states_df['Population']
print(type(population_col))
print(population_col)
Output:
<class 'pandas.core.series.Series'>
0 39538223
1 29145505
2 21538187
3 20201249
Name: Population, dtype: int64
这些结构在数据分析方面相比标准Python列表或字典,甚至原始NumPy数组,提供了若干优势:
NaN,即非数字)的函数。理解Series和DataFrame是有效使用Pandas的第一步。它们奠定了基础,后续所有的数据加载、清洗、转换和分析操作都建立在此之上。在接下来的章节中,我们将学习如何创建、检查和处理这些结构,以便为机器学习 (machine learning)任务准备数据。
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•