1-1.核心数据结构series
Series:一组带有标签的数组,可以看作是一个有序的字典或 Excel 表格中的一列。
-
结构:
-
数据 (Values): 一组数据(NumPy 数组),可以是整数、浮点数、字符串、Python 对象等各种数据类型。
-
索引 (Index): 一组与数据相关联的标签。索引定义了数据的“键”,用于高效地定位和访问数据。默认情况下是整数(0, 1, 2, ..., N-1)。
-
关键特性:
-
一维结构。
-
每个元素都有唯一的索引标签。
-
可以容纳任何数据类型(
dtype
)。 -
支持向量化操作(基于 NumPy)。
-
对齐操作基于索引(非常重要)。
-
-
创建Series的方法
通过列表或数组创建Series时,可以指定自定义索引。若未指定索引,pandas会自动生成从0开始的整数索引。
data = [10, 20, 30]
index = ['a', 'b', 'c']
series_custom = pd.Series(data, index=index)
从字典创建Series时,字典的键会自动成为Series的索引。
dict_data = {'a': 1, 'b': 2, 'c': 3}
series_from_dict = pd.Series(dict_data)
Series的常用操作
Series支持向量化操作,可以直接对Series进行数学运算,而无需遍历每个元素。
series1 = pd.Series([1, 2, 3])
series2 = pd.Series([4, 5, 6])
result = series1 + series2
1-2.series元素索引
可以通过索引或位置访问Series的元素,使用loc
基于标签索引,iloc
基于位置索引。
series = pd.Series([10, 20, 30], index=['x', 'y', 'z'])
value_by_label = series.loc['y']
value_by_position = series.iloc[1]
Series提供统计方法如mean()(求平均值)
、sum()
、max()
、min()
等,方便快速计算描述性统计。
series = pd.Series([1, 2, 3, 4])
print(series.mean()) # 输出: 2.5
print(series.sum()) # 输出: 10
Series可以包含缺失值(NaN),使用isna()
或notna()
方法检测缺失值。
series = pd.Series([1, None, 3])
print(series.isna()) # 输出: [False, True, False]
使用fillna()
方法填充缺失值,或dropna()
方法删除缺失值。
filled_series = series.fillna(0)
dropped_series = series.dropna()
通过条件表达式可以生成布尔索引,用于筛选数据。
series = pd.Series([1, 2, 3, 4])
filtered = series[series > 2]
print(filtered) # 输出: 3, 4
series命名,在Python的pandas库中,Series对象可以通过name
属性来命名。命名有助于标识数据,尤其在多Series操作或DataFrame构建时提升可读性。
import pandas as pd
# 创建未命名的Series
s = pd.Series([1, 2, 3])
print(s.name) # 输出: None
# 命名Series
s.name = "my_series"
print(s.name) # 输出: 'my_series'
创建时命名
可以在Series初始化时直接通过参数name
指定名称:
s = pd.Series([10, 20, 30], name="values")
print(s.name) # 输出: 'values'
2-1.核心数据结构Dataframe
-
定义: 二维带标签数据结构。可以看作是一个表格或电子表格,或者一个共享相同索引的多个 Series 对象的字典(字典的每个“值”是一个 Series,代表 DataFrame 的一列)。
-
结构:
-
数据: 多列数据组成。每一列是一个 Series。
-
行索引 (Index): 定义行的标签(与 Series 的索引概念相同)。
-
列索引 (Columns): 定义列的名称(标签)。列名是访问和操作数据的关键。
-
-
关键特性:
-
二维表格结构(行和列)。
-
行和列都有标签(索引)。
-
列可以有不同的数据类型(
dtype
)。这是与 NumPy 二维数组的关键区别。 -
可以看作是一个由 Series 对象(列)组成的字典。
-
支持强大的数据操作:索引、切片、分组、聚合、合并、透视表、处理缺失值等。
-
对齐操作同时基于行索引和列标签。
-
创建 DataFrame
DataFrame 可以通过以下方式创建:
从字典创建
import pandas as pd
data = {
"Name": ["Alice", "Bob", "Charlie"],
"Age": [25, 30, 35],
"City": ["New York", "Paris", "London"]
}
df = pd.DataFrame(data)
print(df)
输出
Name Age City
0 Alice 25 New York
1 Bob 30 Paris
2 Charlie 35 London
从列表创建
data = [
["Alice", 25, "New York"],
["Bob", 30, "Paris"],
["Charlie", 35, "London"]
]
df = pd.DataFrame(data, columns=["Name", "Age", "City"])
print(df)
输出
Name Age City
0 Alice 25 New York
1 Bob 30 Paris
2 Charlie 35 London
常用操作
查看数据
df.head() # 查看前 5 行
df.tail() # 查看后 5 行
df.info() # 查看数据信息(列类型、非空值等)
df.describe() # 统计摘要(均值、标准差等)
选择数据
df["Name"] # 选择单列
df[["Name", "Age"]] # 选择多列
df.iloc[0] # 通过位置选择行
df.loc[0] # 通过标签选择行
修改数据
df["Age"] = df["Age"] + 1 # 修改整列
df.loc[0, "Age"] = 26 # 修改特定单元格
df["NewColumn"] = df["Age"] * 2 # 添加新列
缺失值处理
df.dropna() # 删除包含缺失值的行
df.fillna(0) # 填充缺失值为 0
重要关系:
-
DataFrame 是 Series 的容器: DataFrame 的每一列都是一个 Series 对象。这些 Series 共享相同的行索引。
-
DataFrame 可以看作是一个字典: 字典的“键”是列名(字符串),字典的“值”是对应列的 Series 数据。
总结:
-
Series
: 一维带标签数组(单列 + 索引)。 -
DataFrame
: 二维带标签表格(多列 + 行索引 + 列名)。这是 Pandas 的绝对核心和灵魂。