数据整理与重塑及自动化数据清洗
立即解锁
发布时间: 2025-09-01 00:53:27 阅读量: 14 订阅数: 18 AIGC 


Python数据清洗实战指南
### 数据整理与重塑及自动化数据清洗
在数据处理过程中,数据的整理与重塑以及自动化数据清洗是非常重要的环节。下面将详细介绍相关的操作方法和技巧。
#### 1. 数据整理与重塑
在处理数据时,我们常常需要将数据从宽格式转换为长格式,或者从长格式转换回宽格式。以下是具体的操作方法。
##### 1.1 使用 `stack` 和 `melt` 进行数据重塑
`stack` 和 `melt` 都可以将数据从宽格式转换为长格式,但 `melt` 提供了更多的灵活性。`stack` 会将所有列名移动到索引中,而 `melt` 可以基于除索引之外的 ID 变量旋转列名和值。
操作步骤如下:
1. **导入 pandas 并加载数据**:
```python
import pandas as pd
nls97 = pd.read_csv("data/nls97g.csv", low_memory=False)
nls97.set_index('personid', inplace=True)
```
2. **查看部分工作周数和大学入学数据**:
```python
weeksworkedcols = ['weeksworked17', 'weeksworked18', 'weeksworked19', 'weeksworked20', 'weeksworked21']
colenrcols = ['colenroct17', 'colenroct18', 'colenroct19', 'colenroct20', 'colenroct21']
nls97.loc[nls97.originalid.isin([2, 3]), ['originalid'] + weeksworkedcols + colenrcols].T
```
3. **使用 `melt` 进行数据重塑**:
```python
weeksworkedmelted = nls97.reset_index().loc[:, ['originalid'] + weeksworkedcols].melt(id_vars=['originalid'],
value_vars=weeksworkedcols,
var_name='year',
value_name='weeksworked')
weeksworkedmelted.loc[weeksworkedmelted.originalid.isin([2, 3])].sort_values(['originalid', 'year'])
```
##### 1.2 使用 `wide_to_long` 一次性转换多组列
当需要融化多组列时,可以使用 `wide_to_long` 函数一次性完成任务。该函数比 `melt` 具有更多的功能,但使用起来稍微复杂一些。
操作步骤如下:
1. **导入 pandas 并加载数据**:
```python
import pandas as pd
nls97 = pd.read_csv("data/nls97g.csv", low_memory=False)
nls97.set_index('personid', inplace=True)
```
2. **查看部分工作周数和大学入学数据**:
```python
weeksworkedcols = ['weeksworked17', 'weeksworked18', 'weeksworked19', 'weeksworked20', 'weeksworked21']
colenrcols = ['colenroct17', 'colenroct18', 'colenroct19', 'colenroct20', 'colenroct21']
nls97.loc[nls97.originalid.isin([2, 3]), ['originalid'] + weeksworkedcols + colenrcols].T
```
3. **运行 `wide_to_long` 函数**:
```python
workschool = pd.wide_to_long(nls97[['originalid'] + weeksworkedcols + colenrcols],
stubnames=['weeksworked', 'colenroct'],
i=['originalid'], j='year').reset_index()
workschool['year'] = workschool.year + 2000
workschool = workschool.sort_values(['originalid', 'year'])
workschool.set_index(['originalid'], inplace=True)
workschool.loc[[2, 3]]
```
##### 1.3 使用 `unstack` 和 `pivot` 将数据从长格式转换回宽格式
有时,我们需要将数据从整齐的结构转换为不整齐的结构,`unstack` 和 `pivot` 可以帮助我们将数据从长格式转换为宽格式。
操作步骤如下:
1. **导入 pandas 并加载数据**:
```python
import pandas as pd
nls97 = pd.read_csv("data/nls97g.csv", low_memory=False)
nls97.set_index(['originalid'], inplace=True)
```
2. **再次堆叠数据**:
```python
weeksworkedcols = ['weeksworked17', 'weeksworked18', 'weeksworked19', 'weeksworked20', 'weeksworked21']
weeksworkedstacked = nls97[weeksworkedcols].stack()
weeksworkedstacked.loc[[2, 3]]
```
3. **再次融化数据**:
```python
weeksworkedmelted = nls97.reset_index().loc[:, ['originalid'] + weeksworkedcols].melt(id_vars=['originalid'],
value_vars=weeksworkedcols,
var_name='year',
value_name='weeksworked')
weeksworkedmelted.loc[weeksworkedmelted.originalid.isin([2, 3])].sort_values(['originalid', 'year'])
```
4. **使用 `unstack` 将堆叠数据从长格式转换为宽格式**:
```python
weeksworked = weeksworkedstacked.unstack()
weeksworked.loc[[2, 3]].T
```
5. **使用 `pivot` 将融化数据从长格式转换为宽格式**:
```python
weeksworked = weeksworkedmelted.pivot(index='originalid',
columns='year', values=['weekswo
```
0
0
复制全文
相关推荐










