参考上课讲授内容,使用pandas库读入一个数据文件data.csv, DataFrame对象展示内容如下所示: 这是一家服装店统计的会员数据。最上面的一行是列坐标,最左侧一 列是行坐标。列坐标中,第 0 列代表的是序号,第 1 列代表的会员 的姓名,第 2 列代表年龄,第 3 列代表体重,第 4~6 列代表男性 会员的三围尺寸,第 7~9 列代表女性会员的三围尺寸。 (1) 删除值全为Nan的行,删除序号列。 (2) 对df对象进行列索引标识。 (3) 年龄中的Nan值用年龄的均值替换。 (4) 将体重列中单位为kgs的数据全部变换成单位为lbs的数据 (1kgs=2.2lbs),再去除lbs后缀。 (5) 将体重列中Nan值用体重的均值替换。 (6) 剔除会员姓名列中的异常字符,再将会员的姓名划分为姓和名 两列。 (7) 将女性会员的腰围列中的Nan用女性腰围的均值替换。 (8) 在df对象中增加一个性别列,男性值为“1”,女性值 为”0”。 (9) 将df中男性的三围数据列和女性的三围数据列合并。 (10) 在df对象中只保存会员的姓、名、性别、年龄、体重、胸围、 腰围、臀围共8列数据,按性别分组,统计输出男性、女性的年 龄、体重及三围数据的均值、方差和中位数。
时间: 2024-02-24 14:53:38 浏览: 91
好的,让我来逐步回答你的问题:
1. 删除值全为Nan的行,删除序号列。
```python
import pandas as pd
# 读入数据文件
df = pd.read_csv('data.csv')
# 删除值全为Nan的行
df.dropna(how='all', inplace=True)
# 删除序号列
df.drop('序号', axis=1, inplace=True)
print(df)
```
2. 对df对象进行列索引标识。
```python
# 设置列索引
columns = ['姓名', '年龄', '体重', '男士胸围', '男士腰围', '男士臀围', '女士胸围', '女士腰围', '女士臀围']
df.columns = columns
print(df)
```
3. 年龄中的Nan值用年龄的均值替换。
```python
# 年龄中的Nan值用年龄的均值替换
mean_age = df['年龄'].mean()
df['年龄'].fillna(mean_age, inplace=True)
print(df)
```
4. 将体重列中单位为kgs的数据全部变换成单位为lbs的数据 (1kgs=2.2lbs),再去除lbs后缀。
```python
# 将体重列中单位为kgs的数据全部变换成单位为lbs的数据 (1kgs=2.2lbs),再去除lbs后缀
df['体重'] = df['体重'].str.replace('kgs', '').astype(float) * 2.2
print(df)
```
5. 将体重列中Nan值用体重的均值替换。
```python
# 将体重列中Nan值用体重的均值替换
mean_weight = df['体重'].mean()
df['体重'].fillna(mean_weight, inplace=True)
print(df)
```
6. 剔除会员姓名列中的异常字符,再将会员的姓名划分为姓和名两列。
```python
# 剔除会员姓名列中的异常字符
df['姓名'] = df['姓名'].str.replace('·', '')
# 将会员的姓名划分为姓和名两列
df[['姓', '名']] = df['姓名'].str.split(' ', expand=True)
print(df)
```
7. 将女性会员的腰围列中的Nan用女性腰围的均值替换。
```python
# 将女性会员的腰围列中的Nan用女性腰围的均值替换
mean_waist = df['女士腰围'].mean()
df.loc[df['女士腰围'].isnull() & (df['女士胸围'].notnull()), '女士腰围'] = mean_waist
print(df)
```
8. 在df对象中增加一个性别列,男性值为“1”,女性值为”0”。
```python
# 在df对象中增加一个性别列,男性值为“1”,女性值为”0“
df['性别'] = df['女士胸围'].notnull().astype(int)
print(df)
```
9. 将df中男性的三围数据列和女性的三围数据列合并。
```python
# 将df中男性的三围数据列和女性的三围数据列合并
df['胸围'] = df['男士胸围'].combine_first(df['女士胸围'])
df['腰围'] = df['男士腰围'].combine_first(df['女士腰围'])
df['臀围'] = df['男士臀围'].combine_first(df['女士臀围'])
print(df)
```
10. 在df对象中只保存会员的姓、名、性别、年龄、体重、胸围、腰围、臀围共8列数据,按性别分组,统计输出男性、女性的年龄、体重及三围数据的均值、方差和中位数。
```python
# 在df对象中只保存会员的姓、名、性别、年龄、体重、胸围、腰围、臀围共8列数据
df = df[['姓', '名', '性别', '年龄', '体重', '胸围', '腰围', '臀围']]
# 按性别分组,统计男性、女性的年龄、体重及三围数据的均值、方差和中位数
grouped = df.groupby('性别')
result = grouped.agg({'年龄': ['mean', 'var', 'median'], '体重': ['mean', 'var', 'median'], '胸围': ['mean', 'var', 'median'], '腰围': ['mean', 'var', 'median'], '臀围': ['mean', 'var', 'median']})
print(result)
```
阅读全文