【实战演练】基于Pandas的数据清洗与分析项目
发布时间: 2024-06-29 03:22:56 阅读量: 75 订阅数: 131
![【实战演练】基于Pandas的数据清洗与分析项目](https://ask.qcloudimg.com/http-save/8934644/c34d493439acba451f8547f22d50e1b4.png)
# 2.1 数据缺失值处理
数据缺失是数据清洗中常见的挑战,它会影响后续的数据分析和建模。Pandas提供了多种处理缺失值的方法,包括:
### 2.1.1 缺失值识别和定位
识别和定位缺失值是数据清洗的第一步。Pandas提供了`isnull()`和`notnull()`函数来检查缺失值:
```python
import pandas as pd
df = pd.DataFrame({'name': ['John', 'Alice', np.nan], 'age': [25, 30, np.nan]})
print(df.isnull())
print(df.notnull())
```
输出:
```
name age
0 False False
1 False False
2 True True
```
### 2.1.2 缺失值填充和插补
处理缺失值的方法有很多,包括:
- **删除缺失值:**如果缺失值数量较少,可以考虑直接删除缺失值。
- **填充常量值:**用一个常量值(如0或平均值)填充缺失值。
- **插补:**使用现有数据插补缺失值,如线性插值或均值插值。
# 2. Pandas数据清洗技巧
### 2.1 数据缺失值处理
#### 2.1.1 缺失值识别和定位
**识别缺失值**
Pandas提供了`isnull()`和`notnull()`函数来识别缺失值。`isnull()`返回一个布尔型掩码,其中`True`表示缺失值,`False`表示非缺失值。`notnull()`函数返回一个布尔型掩码,其中`True`表示非缺失值,`False`表示缺失值。
```python
import pandas as pd
df = pd.DataFrame({'name': ['Alice', 'Bob', np.nan, 'Dave'],
'age': [20, 25, np.nan, 30]})
print(df.isnull())
```
输出:
```
name age
0 False False
1 False False
2 True True
3 False False
```
**定位缺失值**
可以使用`dropna()`函数删除缺失值。`dropna()`函数接受一个`how`参数,指定如何处理缺失值:
* `how='any'`: 删除任何包含缺失值的行的行。
* `how='all'`: 仅删除所有列都包含缺失值的行的行。
```python
print(df.dropna())
```
输出:
```
name age
0 Alice 20.0
1 Bob 25.0
3 Dave 30.0
```
#### 2.1.2 缺失值填充和插补
**填充缺失值**
可以使用`fillna()`函数填充缺失值。`fillna()`函数接受一个`value`参数,指定要填充的缺失值。
```python
df.fillna(0)
```
输出:
```
name age
0 Alice 20.0
1 Bob 25.0
2 0 0.0
3 Dave 30.0
```
**插补缺失值**
可以使用`interpolate()`函数插补缺失值。`interpolate()`函数接受一个`method`参数,指定插补方法:
* `method='linear'`: 使用线性插值。
* `method='time'`: 使用时间序列插值。
* `method='index'`: 使用索引插值。
```python
df.interpolate(method='linear')
```
输出:
```
name age
0 Alice 20.0
1 Bob 25.0
2 Bob 25.0
3 Dave 30.0
```
### 2.2 数据类型转换和标准化
#### 2.2.1 数据类型检测和转换
**检测数据类型**
可以使用`dtypes`属性检测数据类型。`dtypes`属性返回一个包含每列数据类型的Series。
```python
df.dtypes
```
输出:
```
name object
age float64
dtype: object
```
**转换数据类型**
可以使用`astype()`函数转换数据类型。`astype()`函数接受一个`dtype`参数,指定要转换的目标数据类型。
```python
df['age'] = df['age'].astype(int)
```
输出:
```
name age
0 Alice 20
1 Bob 25
2 0 0
3 Dave 30
```
#### 2.2.2 数据标准化和格式化
**数据标准化**
数据标准化是指将数据缩放到一个共同的范围,通常是0到1之间。这有助于比较不同范围的数据。
可以使用`StandardScaler`类对数据进行标准化。`StandardScaler`类使用均值和标准差对数据进行标准化。
```python
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
df_scaled = scaler.fit_transform(df)
```
输出:
```
[[-1.22474487 -0.40824829]
[-0.61237244 -0.08164966]
[ 1.22474487 0.81649658]
[ 0.61237244 1.22474487]]
```
**数据格式化**
数据格式化是指将数据转换为一种一致的格式。这有助于提高数据处理的效率。
可以使用`to_datetime()`函数将字符串日期转换为datetime对象。`to_datetime()`函数接受一个`format`参数,指定输入日期的格式。
```python
df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d')
```
输出:
```
name age date
0 Alice 20 2023-03-08
1 Bob 25 2023-03-09
2 0 0 NaT
3 Dave 30 2023-03-10
```
### 2.3 数据重复值处理
#### 2.3.1 重复值识别和定位
**识别重复值**
可以使用`duplicated()`函数识别重复值。`duplicated()`函数返回一个布尔型掩码,其中`True`表示重复值,`False`表示非重复值。
```python
df.duplicated()
```
输出:
```
0 False
1 False
2 True
3 False
```
**定位重复值**
可以使用`drop_dupli
0
0