1、 参考上课讲授内容,使用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-27 21:52:00 浏览: 152
使用pandas库对csv文件进行筛选保存
5星 · 资源好评率100%
好的,以下是针对您提供的数据文件data.csv的处理代码,使用的是Python中的pandas库:
```python
import pandas as pd
# 读取数据文件
df = pd.read_csv('data.csv')
# (1) 删除值全为Nan的行,删除序号列
df.dropna(how='all', inplace=True) # 删除值全为Nan的行
df.drop(columns=['序号'], inplace=True) # 删除序号列
# (2) 对df对象进行列索引标识
columns = ['姓名', '年龄', '体重', '胸围', '腰围', '臀围']
columns.extend(['{}'.format(i) for i in range(1, 4)])
columns.extend(['{}'.format(i) for i in range(4, 7)])
df.columns = columns
# (3) 年龄中的Nan值用年龄的均值替换
df['年龄'].fillna(df['年龄'].mean(), inplace=True)
# (4) 将体重列中单位为kgs的数据全部变换成单位为lbs的数据 (1kgs=2.2lbs),再去除lbs后缀
def kg_to_lbs(x):
if pd.isna(x):
return x
else:
return float(x[:-3]) * 2.2
df['体重'] = df['体重'].apply(kg_to_lbs)
# (5) 将体重列中Nan值用体重的均值替换
df['体重'].fillna(df['体重'].mean(), inplace=True)
# (6) 剔除会员姓名列中的异常字符,再将会员的姓名划分为姓和名两列
def clean_name(name):
# 剔除异常字符
name = name.replace('·', '')
name = name.replace(' ', '')
# 划分为姓和名两列
if len(name) == 2:
return name[0], name[1]
else:
return name[:2], name[2:]
df['姓'], df['名'] = zip(*df['姓名'].apply(clean_name))
# (7) 将女性会员的腰围列中的Nan用女性腰围的均值替换
df.loc[df['性别'] == 0, '腰围'].fillna(df.loc[df['性别'] == 0, '腰围'].mean(), inplace=True)
# (8) 在df对象中增加一个性别列,男性值为“1”,女性值为”0“
df['性别'] = df['胸围'].apply(lambda x: 1 if pd.notna(x) else 0)
# (9) 将df中男性的三围数据列和女性的三围数据列合并
df_male = df[df['性别'] == 1][['胸围', '腰围', '臀围']]
df_male.columns = ['男性胸围', '男性腰围', '男性臀围']
df_female = df[df['性别'] == 0][['胸围', '腰围', '臀围']]
df_female.columns = ['女性胸围', '女性腰围', '女性臀围']
df = pd.concat([df, df_male, df_female], axis=1)
# (10) 在df对象中只保存会员的姓、名、性别、年龄、体重、胸围、腰围、臀围共8列数据,按性别分组,统计输出男性、女性的年龄、体重及三围数据的均值、方差和中位数
df_new = df[['姓', '名', '性别', '年龄', '体重', '胸围', '腰围', '臀围']]
grouped = df_new.groupby('性别')
for name, group in grouped:
print('性别为{}的数据:'.format(name))
print('年龄均值:{}'.format(group['年龄'].mean()))
print('年龄方差:{}'.format(group['年龄'].var()))
print('年龄中位数:{}'.format(group['年龄'].median()))
print('体重均值:{}'.format(group['体重'].mean()))
print('体重方差:{}'.format(group['体重'].var()))
print('体重中位数:{}'.format(group['体重'].median()))
print('胸围均值:{}'.format(group['胸围'].mean()))
print('胸围方差:{}'.format(group['胸围'].var()))
print('胸围中位数:{}'.format(group['胸围'].median()))
print('腰围均值:{}'.format(group['腰围'].mean()))
print('腰围方差:{}'.format(group['腰围'].var()))
print('腰围中位数:{}'.format(group['腰围'].median()))
print('臀围均值:{}'.format(group['臀围'].mean()))
print('臀围方差:{}'.format(group['臀围'].var()))
print('臀围中位数:{}'.format(group['臀围'].median()))
```
阅读全文