Pandas Series与DataFrame API及属性详解

353 阅读5分钟

Pandas Series与DataFrame API及属性详解

Pandas 是 Python 中用于数据分析的强大库,其核心数据结构为 Series(一维数据)和 DataFrame(二维数据)。本文将详细介绍 Series 和 DataFrame 的常用 API、属性,并通过示例帮助理解和记忆。


一、Pandas Series 详解

1. Series 简介

Series 是一个带标签的一维数组,类似于 NumPy 数组与 Python 字典的结合体。它由两部分组成:

  • 数据:存储实际值(可以是任何类型)。
  • 索引:每个数据的标签,默认从 0 开始。

2. Series 创建

以下是创建 Series 的常用方法:

import pandas as pd
import numpy as np

# 通过列表创建
s1 = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
print(s1)
# 输出:
# a    1
# b    2
# c    3
# d    4
# dtype: int64

# 通过字典创建
s2 = pd.Series({'x': 10, 'y': 20, 'z': 30})
print(s2)
# 输出:
# x    10
# y    20
# z    30
# dtype: int64

# 通过 NumPy 数组创建
s3 = pd.Series(np.array([5, 6, 7]), index=['p', 'q', 'r'])
print(s3)
# 输出:
# p    5
# q    6
# r    7
# dtype: int64

3. Series 属性

以下是 Series 的常用属性,用于快速获取信息:

属性描述示例代码输出
values返回底层 NumPy 数组s1.values[1 2 3 4]
index返回索引对象s1.indexIndex(['a', 'b', 'c', 'd'], dtype='object')
dtype返回数据类型s1.dtypeint64
name返回 Series 的名称s1.name = 'test'; print(s1.name)test
size返回元素个数s1.size4
empty检查是否为空pd.Series().emptyTrue

示例:

s = pd.Series([10, 20, 30], index=['x', 'y', 'z'], name='scores')
print(s.values)  # [10 20 30]
print(s.index)   # Index(['x', 'y', 'z'], dtype='object')
print(s.dtype)   # int64
print(s.name)    # scores
print(s.size)    # 3

4. Series 常用 API

以下是 Series 的常用方法,分为索引、运算、统计和数据处理等类别:

(1)索引与选择
方法描述示例代码输出
loc[]基于标签索引s.loc['x']10
iloc[]基于位置索引s.iloc[0]10
at[]快速标量访问(标签)s.at['y']20
iat[]快速标量访问(位置)s.iat[1]20

示例:

s = pd.Series([10, 20, 30], index=['x', 'y', 'z'])
print(s.loc['x'])  # 10
print(s.iloc[1])   # 20
print(s.at['z'])   # 30
print(s.iat[0])    # 10
(2)数学与统计
方法描述示例代码输出
sum()求和s.sum()60
mean()均值s.mean()20.0
std()标准差s.std()10.0
min() / max()最小/最大值s.min()10
idxmin() / idxmax()最小/最大值的索引s.idxmax()'z'

示例:

s = pd.Series([10, 20, 30], index=['x', 'y', 'z'])
print(s.sum())      # 60
print(s.mean())     # 20.0
print(s.max())      # 30
print(s.idxmin())   # 'x'
(3)数据处理
方法描述示例代码输出
apply()应用自定义函数s.apply(lambda x: x*2)x 20, y 40, z 60
map()映射值s.map({10: 'low', 20: 'mid', 30: 'high'})x low, y mid, z high
replace()替换值s.replace(10, 100)x 100, y 20, z 30
dropna()删除缺失值pd.Series([1, np.nan, 3]).dropna()0 1.0, 2 3.0

示例:

s = pd.Series([10, 20, 30], index=['x', 'y', 'z'])
print(s.apply(lambda x: x*2))
# x    20
# y    40
# z    60
print(s.map({10: 'low', 20: 'mid', 30: 'high'}))
# x    low
# y    mid
# z    high

二、Pandas DataFrame 详解

1. DataFrame 简介

DataFrame 是一个带标签的二维数据结构,类似于表格或 SQL 表。它由多个 Series 组成,每列是一个 Series。

2. DataFrame 创建

以下是创建 DataFrame 的常用方法:

# 通过字典创建
data = {'name': ['Alice', 'Bob', 'Cathy'], 'age': [25, 30, 22], 'score': [90, 85, 88]}
df = pd.DataFrame(data)
print(df)
# 输出:
#      name  age  score
# 0  Alice   25     90
# 1    Bob   30     85
# 2  Cathy   22     88

# 通过列表和指定列名
df2 = pd.DataFrame([[1, 'A'], [2, 'B'], [3, 'C']], columns=['id', 'grade'])
print(df2)
# 输出:
#    id grade
# 0   1     A
# 1   2     B
# 2   3     C

3. DataFrame 属性

以下是 DataFrame 的常用属性:

属性描述示例代码输出
values返回底层 NumPy 数组df.values[[Alice 25 90] [Bob 30 85] [Cathy 22 88]]
index返回行索引df.indexRangeIndex(start=0, stop=3, step=1)
columns返回列名df.columnsIndex(['name', 'age', 'score'], dtype='object')
dtypes返回每列数据类型df.dtypesname object, age int64, score int64
shape返回形状 (行, 列)df.shape(3, 3)
size返回元素总数df.size9

示例:

df = pd.DataFrame({'name': ['Alice', 'Bob', 'Cathy'], 'age': [25, 30, 22]})
print(df.columns)  # Index(['name', 'age'], dtype='object')
print(df.shape)    # (3, 2)
print(df.dtypes)   # name    object, age      int64

4. DataFrame 常用 API

以下是 DataFrame 的常用方法,分为选择、统计、合并和数据处理等类别:

(1)选择与索引
方法描述示例代码输出
loc[]基于标签索引df.loc[0, 'name']Alice
iloc[]基于位置索引df.iloc[0, 1]25
at[]快速标量访问(标签)df.at[1, 'age']30
iat[]快速标量访问(位置)df.iat[1, 1]30
head(n)查看前 n 行df.head(2)前两行数据
tail(n)查看后 n 行df.tail(1)最后一行数据

示例:

df = pd.DataFrame({'name': ['Alice', 'Bob', 'Cathy'], 'age': [25, 30, 22]})
print(df.loc[0, 'name'])  # Alice
print(df.iloc[1, 1])      # 30
print(df.head(2))
#      name  age
# 0  Alice   25
# 1    Bob   30
(2)统计与聚合
方法描述示例代码输出
describe()统计摘要df.describe()数值列的统计信息
sum()按列求和df['age'].sum()77
mean()按列均值df['age'].mean()25.67
groupby()分组聚合df.groupby('name')['age'].mean()按 name 分组的 age 均值

示例:

df = pd.DataFrame({'name': ['Alice', 'Bob', 'Alice'], 'age': [25, 30, 22]})
print(df.describe())
#             age
# count  3.000000
# mean  25.666667
print(df.groupby('name')['age'].mean())
# name
# Alice    23.5
# Bob      30.0
(3)数据处理
方法描述示例代码输出
drop()删除行/列df.drop('age', axis=1)删除 age 列
fillna()填充缺失值df.fillna(0)缺失值填充为 0
merge()合并 DataFramepd.merge(df1, df2, on='key')按 key 合并
V sort_values()`按列排序df.sort_values('age')按 age 排序

示例:

df = pd.DataFrame({'name': ['Alice', 'Bob', 'Cathy'], 'age': [25, 30, 22]})
df_sorted = df.sort_values('age')
print(df_sorted)
#      name  age
# 2  Cathy   22
# 0  Alice   25
# 1    Bob   30

三、记忆技巧

  1. 联想记忆

    • Series:想象成“单一列”(Single column),只有一维数据。
    • DataFrame:想象成“数据表格”(Data Frame),多列多行。
  2. 分类记忆

    • 属性:通常是“只读”信息,如 values, index, shape
    • 方法:通常是“操作”数据,如 loc, apply, groupby
  3. 实践记忆

    • 动手运行每个示例代码,尤其是 loc vs ilocapply vs map 等易混淆的概念。
    • 尝试用真实数据集(如 CSV 文件)练习 DataFrame 操作。

四、总结

Pandas 的 Series 和 DataFrame 提供了丰富的 API 和属性,覆盖数据选择、统计、处理等功能。通过理解其核心概念(索引、标签、数据结构),结合示例代码实践,你可以快速掌握 Pandas 的使用。希望这篇博客能帮助你更轻松地学习和记忆 Pandas!