一、数据维度:从 “线” 到 “体” 的数据形态
数据维度本质是 “定位一个元素需要几个索引”,可以用生活化的比喻理解:
- 一维:像一根线,只有 “前后” 方向,1 个索引就能找到元素;
- 二维:像一张纸(表格),需要 “行 + 列”2 个索引定位;
- 多维:像一个魔方,需要 3 个及以上索引(如长 × 宽 × 高)定位。
1. 一维数据(1D)
最基础的维度,Python 中常用列表、元组、一维数组表示,仅需 1 个索引访问元素。
# 示例:存储班级学生姓名(一维列表)
names = ["张三", "李四", "王五"]
# 访问元素:索引从0开始
print(names[0]) # 输出:张三
print(names[-1]) # 输出:王五(倒数第一个)
# 遍历一维数据
for name in names:
print(f"学生:{name}")
应用场景:存储单列数据(如成绩、手机号、商品名称)。
2. 二维数据(2D)
类似 Excel 表格,Python 中常用嵌套列表、二维数组、Pandas DataFrame表示,需 2 个索引(行 + 列)访问元素。
# 示例:存储学生姓名+语文/数学成绩(二维列表)
student_scores = [
["张三", 90, 88], # 第0行:姓名、语文、数学
["李四", 85, 92], # 第1行
["王五", 95, 80] # 第2行
]
# 访问元素:行索引 + 列索引
print(student_scores[1][0]) # 第1行第0列:李四
print(student_scores[2][2]) # 第2行第2列:80(王五的数学成绩)
# 遍历二维数据(按行遍历)
for row in student_scores:
name, chinese, math = row # 解包每行数据
print(f"{name}:语文{chinese},数学{math}")
应用场景:存储表格型数据(如学生信息表、销售清单)。
3. 多维数据(3D+)
三维及以上数据,常见于图像(宽 × 高 × 颜色通道)、时空数据(时间 × 地点 × 指标)等场景,Python 中常用numpy 多维数组实现(嵌套列表可读性差,不推荐)。
python
运行
import numpy as np
# 示例:三维数组(2个班级 × 3个学生 × 2门成绩)
class_scores = np.array([
[[90, 88], [85, 92], [95, 80]], # 1班:3个学生的语文/数学成绩
[[88, 91], [79, 85], [92, 87]] # 2班
])
# 访问元素:班级索引 + 学生索引 + 科目索引
print(class_scores[0][1][1]) # 1班第2个学生的数学成绩:92
print(class_scores.shape) # 查看维度:(2, 3, 2) → 2行3列2层
维度转换小技巧(新手常用)
用numpy.reshape可快速转换数据维度(一维↔二维↔多维):
# 一维数组转二维(3行2列)
arr1d = np.array([1,2,3,4,5,6])
arr2d = arr1d.reshape(3, 2)
print(arr2d)
# 输出:
# [[1 2]
# [3 4]
# [5 6]]
二、数据格式化:让数据 “规范又好看”
数据格式化是将数据按指定规则展示(如字符串拼接)或存储(如 JSON/CSV),核心分两类:字符串格式化(输出展示)、数据结构格式化(存储 / 传输)。
1. 字符串格式化(最常用)
目的:将变量 / 数据嵌入字符串,规范输出格式,Python 有 3 种主流方式(推荐优先用 f-string)。
| 方式 | 语法示例 | 特点 |
|---|---|---|
| % 格式化(老式) | "姓名:%s,成绩:%.1f" % (name, score) | 兼容性好,语法稍繁琐 |
| str.format() | "姓名:{},成绩:{:.1f}".format(name, score) | 通用,支持参数定位 |
| f-string(Python3.6+) | f"姓名:{name},成绩:{score:.1f}" | 最简洁、高效,新手首选 |
# 实战示例:三种方式对比
name = "张三"
score = 90.5
# 1. %格式化
print("姓名:%s,成绩:%.1f" % (name, score)) # 输出:姓名:张三,成绩:90.5
# 2. str.format()
print("姓名:{},成绩:{:.1f}".format(name, score)) # 输出同上
# 3. f-string(推荐)
print(f"姓名:{name},成绩:{score:.1f}") # 输出同上
2. 数据结构格式化(存储 / 传输)
将 Python 原生数据(列表 / 字典)转换为 JSON、CSV 等通用格式,方便存储到文件或传输给接口。
示例 1:字典转 JSON(接口数据常用)
JSON 是跨语言的通用数据格式,需导入json模块:
import json
# 原始Python字典
student = {
"name": "张三",
"age": 18,
"scores": {"chinese": 90, "math": 88}
}
# 字典转JSON字符串(ensure_ascii=False显示中文,indent=2格式化缩进)
json_str = json.dumps(student, ensure_ascii=False, indent=2)
print(json_str)
# 输出:
# {
# "name": "张三",
# "age": 18,
# "scores": {
# "chinese": 90,
# "math": 88
# }
# }
# JSON字符串转回字典
student_dict = json.loads(json_str)
print(student_dict["scores"]["math"]) # 输出:88
示例 2:二维列表转 CSV(Excel 兼容)
CSV 是表格型数据的轻量格式,需导入csv模块:
import csv
# 二维数据(表头+内容)
data = [
["姓名", "语文", "数学"],
["张三", 90, 88],
["李四", 85, 92]
]
# 写入CSV文件(newline=""避免空行,encoding="utf-8"支持中文)
with open("student_scores.csv", "w", encoding="utf-8", newline="") as f:
writer = csv.writer(f)
writer.writerows(data) # 批量写入所有行
# 读取CSV文件
with open("student_scores.csv", "r", encoding="utf-8") as f:
reader = csv.reader(f)
for row in reader:
print(row) # 输出每行数据(列表形式)
# 输出:
# ['姓名', '语文', '数学']
# ['张三', '90', '88']
# ['李四', '85', '92']
总结
- 数据维度:一维(单索引,如列表)、二维(行 + 列索引,如嵌套列表)、多维(多索引,如 numpy 数组)是核心形态,维度转换可借助
numpy.reshape; - 字符串格式化:优先使用
f-string,简洁高效,%.1f等格式符可控制数值精度; - 数据结构格式化:JSON 适合接口传输,CSV 适合表格存储,转换时需注意编码(如
utf-8)和格式参数(如indent)。