参考上课讲授内容,使用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”。
时间: 2024-02-27 15:51:57 浏览: 142
利用pandas向一个csv文件追加写入数据的实现示例
好的,以下是针对您提供的数据文件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)
```
以上代码完成了对数据文件的处理,实现了题目中要求的各个步骤。最终得到的DataFrame对象中,各列的含义如下:
- 姓、名:会员的姓和名
- 年龄:会员的年龄
- 体重:会员的体重,单位为磅(lbs)
- 胸围、腰围、臀围:会员的三围尺寸
- 性别:会员的性别,男性值为1,女性值为0
阅读全文