# 4.1.2 数据框创建与基本操作

数据框（DataFrame）是一种二维的数据结构，用于存储和处理表格数据，它具有行和列的标签。创建数据框对象时需要分别指定行、列标签。导入惯例为 `import pandas as pd`，以及 `from pandas import DataFrame`。

常用两种方法创建数据框。其一，从字典创建：字典的键成为列标签，再用 `index` 参数指定行标签。例如 `data = {'平安科技':[45.2,47.1,46.5,49.8], '南方通信':[31.9,27.3,25.2,24.5], '幸福银行':[3.4,4.6,5.2,6.8]}`，再执行 `df = DataFrame(data, index=['2024-01','2024-02','2024-03','2024-04'])`。其二，从二维列表创建：二维列表的元素成为数据框的行数据，再用 `index` 指定行标签、`columns` 指定列标签，例如 `DataFrame(data, columns=col, index=ind)`。两种方法可得到结构相同的数据框。

创建后可在末尾追加新行。pandas 2.x 使用 `concat()`：先把新行做成数据框，如 `new_row = pd.DataFrame({'平安科技':45.6, '南方通信':26.4, '幸福银行':5.8}, index=['2024-05'])`，再 `df = pd.concat([df, new_row])`。pandas 1.x 可用 `append()`：若参数是带 `name` 属性的序列，`name` 作为新行的行标签；若参数是字典或无 `name` 的序列，需设置 `ignore_index=True` 自动生成行索引，此时原有行标签也会被重建为 0、1、2…。`append()` 生成新对象而不修改原对象，要更新需把返回值赋回，如 `df = df.append(参数)`。增加新列可直接赋值：`对象['新列名'] = 数据`，数据可以是列表或序列对象，长度要与原对象相同，例如 `df['三一重工'] = [14.2, 15.6, 17.8, 16.5]`。

删除行和列使用数据框的 `drop()` 方法，格式为 `对象.drop('标签名', axis, inplace)`。删除行时标签名为行标签，`axis` 为 0 或不提供该参数，如 `df.drop('2024-02')`；删除列时标签名为列标签，`axis` 为 1，如 `df.drop('幸福银行', axis=1)`。`inplace` 为 True 时直接修改原始对象，否则生成一个新对象。

`sort_values()` 用于根据指定列对数据进行排序，能够对一列或多列按升序或降序排列，默认升序。例如 `df.sort_values(by='体重')` 按体重升序；`ascending=False` 为降序；`by=['年龄','体重']` 表示先按年龄排序，年龄相同再按体重排。易错点：pandas 2.x 追加行应使用 `concat()`，1.x 的 `append()` 在新版本中已移除；`drop()` 与 `append()` 默认都不修改原对象；删列必须指定 `axis=1`，否则会按行标签查找；新列赋值的长度必须与行数一致。

## 关键要点
- 数据框是二维表格结构，具有行标签和列标签；导入可用 `DataFrame` 或 `pd.DataFrame`。
- 从字典创建：键成为列标签，`index` 指定行标签；从二维列表创建：行数据加 `index` 与 `columns`。
- pandas 2.x 用 `concat()` 追加行；1.x 可用 `append()`，带 `name` 的序列用 `name` 作行标签，字典需 `ignore_index=True`。
- 增加列：`对象['新列名'] = 数据`，列表或序列长度须与行数相同。
- `drop()` 删行默认 `axis=0`，删列必须 `axis=1`；`inplace=True` 才改原对象。
- `sort_values(by=...)` 默认升序，多列时按关键字依次排序。

---
