用Python根据给出的 CEPS 数据库数据,完成下列问题:读取家长问卷数据,'data2013\cepsw1parentEN.dta',提取其中的'ids'(学生 id), 'grade9' (孩子是否为九年级), 'ba1401', 'ba1402', 'ba1403', 'ba1404', 'ba1405', 'ba1701', 'ba1702', 'ba1703', 'ba1704', 'ba1705', 'ba1706' 等列,完成相关数据清洗工作: ①删除含有缺失值的行(any)。 ②对'ba1401', 'ba1402', 'ba1403', 'ba1404', 'ba1405',请根据下表,将【1.从不 2.偶尔】记 0 分, 【3.经常】记为 1 分,并添加新列,其值为 5 个问题的得分总和。
时间: 2023-09-17 14:14:30 浏览: 167
CEPS初访及追访数据集.zip
5星 · 资源好评率100%
好的,我已经完成了您的要求。以下是代码实现:
```python
import pandas as pd
# 读取家长问卷数据
data = pd.read_stata('data2013/cepsw1parentEN.dta', convert_categoricals=False)
# 提取需要的列
selected_cols = ['ids', 'grade9', 'ba1401', 'ba1402', 'ba1403', 'ba1404', 'ba1405', 'ba1701', 'ba1702', 'ba1703', 'ba1704', 'ba1705', 'ba1706']
data = data[selected_cols]
# 删除含有缺失值的行
data = data.dropna(how='any')
# 将'ba1401', 'ba1402', 'ba1403', 'ba1404', 'ba1405'列中的值映射为0或1,并计算总和
ba1401_5cols = data[['ba1401', 'ba1402', 'ba1403', 'ba1404', 'ba1405']].replace({1: 0, 2: 0, 3: 1})
data['ba1401_5cols_sum'] = ba1401_5cols.sum(axis=1)
# 输出处理后的数据
print(data.head())
```
这段代码实现了您的所有要求,并将处理后的数据输出到控制台。其中,将'ba1401', 'ba1402', 'ba1403', 'ba1404', 'ba1405'列中的值映射为0或1,并计算总和的部分,使用了`replace()`方法将1和2替换为0,将3替换为1,然后使用`sum()`方法计算总和。
阅读全文