Pandas 在人工智能中的应用:数据预处理与特征工程,为人工智能模型提供高质量数据
发布时间: 2024-06-24 03:24:22 阅读量: 59 订阅数: 39
![Pandas 在人工智能中的应用:数据预处理与特征工程,为人工智能模型提供高质量数据](https://img-blog.csdnimg.cn/img_convert/225ff75da38e3b29b8fc485f7e92a819.png)
# 1. Pandas概述**
Pandas是一个开源的Python库,用于数据分析和操作。它提供了高效、灵活的数据结构和工具,使数据处理任务变得更加容易。Pandas基于NumPy库,并提供了更高级别的功能,包括:
* **DataFrame:**一个类似于表格的数据结构,可存储不同类型的数据。
* **Series:**一个一维数组,可存储单一数据类型。
* **Index:**一个轴标签,用于标识DataFrame的行或列。
# 2. 数据预处理
数据预处理是数据分析和建模过程中的关键步骤,它可以提高数据质量,为后续的分析和建模任务做好准备。Pandas提供了丰富的工具和方法,可以有效地执行各种数据预处理任务。
### 2.1 数据清洗
数据清洗涉及识别和处理数据中的错误、缺失和不一致之处。
#### 2.1.1 缺失值处理
缺失值是数据集中常见的问题,它们可能会对分析和建模结果产生负面影响。Pandas提供了多种处理缺失值的方法:
- `dropna()`:删除包含缺失值的整个行或列。
- `fillna()`:用指定值填充缺失值,例如平均值、中位数或众数。
- `interpolate()`:使用线性或其他插值方法估计缺失值。
```python
import pandas as pd
# 创建一个包含缺失值的数据框
df = pd.DataFrame({
"Name": ["John", "Mary", "Bob", "Alice", "Tom"],
"Age": [20, 25, None, 30, 28],
"Gender": ["Male", "Female", "Male", "Female", "Male"]
})
# 删除包含缺失值的整个行
df = df.dropna()
# 用平均值填充缺失值
df["Age"] = df["Age"].fillna(df["Age"].mean())
# 使用线性插值估计缺失值
df["Age"] = df["Age"].interpolate(method="linear")
```
#### 2.1.2 异常值处理
异常值是数据集中明显偏离其他值的数据点。它们可能会扭曲分析和建模结果,因此需要识别和处理。Pandas提供了以下方法来处理异常值:
- `zscore()`:计算每个数据点的 z 分数,并标识超过指定阈值的异常值。
- `iqr()`:计算每个数据点的四分位间距 (IQR),并标识超过指定倍数 IQR 的异常值。
- `boxplot()`:绘制箱线图,可视化异常值。
```python
import pandas as pd
# 创建一个包含异常值的数据框
df = pd.DataFrame({
"Name": ["John", "Mary", "Bob", "Alice", "Tom"],
"Age": [20, 25, 100, 30, 28],
"Gender": ["Male", "Female", "Male", "Female", "Male"]
})
# 计算每个数据点的 z 分数
df["z_score"] = (df["Age"] - df["Age"].mean()) / df["Age"].std()
# 标识超过 3 个标准差的异常值
outliers = df[df["z_score"].abs() > 3]
# 使用 IQR 标识异常值
iqr = df["Age"].quantile(0.75) - df["Age"].quantile(0.25)
outliers = df[df["Age"] > (df["Age"].quantile(0.75) + 1.5 * iqr)]
```
### 2.2 数据转换
数据转换涉及将数据从一种格式或类型转换为另一种格式或类型。
#### 2.2.1 数据类型转换
Pandas提供了多种方法来转换数据类型:
- `astype()`:将数据转换为指定的类型,例如整数、浮点数或字符串。
- `to_numeric()`:将数据转换为数字类型,并处理缺失值和错误。
- `to_datetime()`:将数据转换为日期时间类型。
```python
import pandas as pd
# 创建一个包含不同数据类型的数据框
df = pd.DataFrame({
"Name": ["John", "Mary", "Bob", "Alice", "Tom"],
"Age": [20, 25, None, 30, 28],
"Gender": ["Male", "Female", "Male", "Female", "Male"],
"Salary": ["$20,000", "$25,000", "$30,000", "$35,000", "$40,000"]
})
# 将 "Age" 列转换为整数类型
df["Age"] = df["Age"].astype(int)
# 将 "Salary" 列转换为浮点数类型
df["Salary"] = df["Salary"].str.replace("$", "").astype(float)
```
#### 2.2.2 数据格式转换
Pandas还提供了以下方法来转换数据格式:
- `pivot()`:将数据从宽格式转换为长格式,或从长格式转换为宽格式。
- `stack()`:将层次索引的数据转换为扁平格式。
- `unstack()`:将扁平格式的数据转换为层次索引格式。
```python
import pandas as pd
# 创建一个宽格式的数据框
df = pd.DataFrame({
"Name": ["John", "Mary", "Bob"],
"Age": [20, 25, 30],
"Gender": ["Male", "Female", "Male"],
"City": ["New York", "London", "Paris"]
})
# 将宽格式转换为长格式
df_long = df.pivot(index="Name", columns="Gender", values="Age")
# 将扁平格式转换为层次索引格式
df_hierarchical = df.stack()
```
### 2.3 数据集成
数据集成涉及将来自不同来源的数据组合到一个单一的、一致的数据集中。
#### 2.3.1 数据合并
Pandas提供了以下方法来合并数据:
- `merge()`:将两个或多个数据框合并为一个新的数据框,基于一个或多个公共键。
- `join()`:将两个或多个数据框连接为一个新的数据框,基于一个或多个公共键。
- `concat()`:将两个或多个数据框连接为一个新的数据框,沿行或列。
```python
import pandas as pd
# 创建两个数据框
df1 = pd.DataFrame({
"Name": ["John", "Mary", "Bob"],
"Age": [20, 25, 30]
})
df2 = pd.DataFrame({
"Name": ["John", "Alice", "Tom"],
"Gender": ["Male", "Female", "Male"]
})
# 将两个数据框合并为一个新的数据框
df_merged = pd.merge(df1, df2, on="Name")
# 将两个数据框连接为一个新的数据框
df_joined = df1.join(df2, on="Name")
# 将两个数据框连接为一个新的数据框,沿行
df_concat = pd.concat([df1, df2], ignore_index=True)
```
#### 2.3.2 数据连接
Pandas还提供了以下方法来连接数据:
-
0
0