本文以此图为例
列坐标中,第 0 列代表的是序号,第 1 列代表的会员的姓名,第 2 列代表年龄,第 3 列代表体重,第 4~6 列代表男性会员的三围尺寸,第 7~9 列代表女性会员的三围尺寸。
在数据中有NaN和“-”,代表缺失值,如何补足缺失值呢?
一整行都为空:直接删除全空的行
df.dropna(how="all",inplace=True)
在体重一列,出现的单位有:kg、lbs。我们需要统一单位。
# 获取 weight 数据列中单位为 lbs 的数据
rows_with_lbs = df['weight'].str.contains('lbs').fillna(False)
print(df[rows_with_lbs])
# 将 lbs转换为 kgs, 2.2lbs=1kgs
for i,lbs_row in df[rows_with_lbs].iterrows():
# 截取从头开始到倒数第三个字符之前,即去掉lbs。
weight = int(float(lbs_row['weight'][:-3])/2.2)
df.at[i,'weight'] = '{}kgs'.format(weight)
直接删除非ASCII字符
# 删除非 ASCII 字符
df['first_name'].replace({
r'[^\x00-\x7F]+':''}, regex=True, inplace=True)
df['last_name'].replace({
r'[^\x00-\x7F]+':''}, regex=True, inplace=True)
一列中包含不止一个参数的情况需要拆分字段,尽量使字段信息不可再分。
# 切分名字,删除源数据列
df[['first_name','last_name']] = df['name'].str.split(expand=True)
df.drop('name', axis=1, inplace=True)
需要去重
# 删除重复数据行
df.drop_duplicates(['first_name','last_name'],inplace=True)
import pandas as pd
from pandas import DataFrame
# 将Excel存入Dataframe
df = pd.read_excel('accountMessage.xlsx')
# print(df)
# 删除空行和没用的列,这一步要在填充缺失值前做,不然填充完之后就没空行了
df = df.drop(['\t', 0], axis=1)
df.dropna(how='all', inplace=True)
# print(df)
# 用均值填充年龄缺失值
df[2].fillna(df[2].mean(), inplace=True)
df[2] = df[2].apply(int)
# print(df)
# 统一体重列单位为kg
rows_lbs = df[3].str.contains('lbs').fillna(False)
# print(df[rows_lbs])
for i, lbs_row in df[rows_lbs].iterrows(): # 使用iterrows()对df进行遍历
weight = int(float(lbs_row[3][:3]) / 2.2) # lbs->kg换算
df.at[i, 3] = '{}kg'.format(weight)
rows_kgs = df[3].str.contains('kgs').fillna(False) # 把kgs改成kg
for i, lbs_kgs in df[rows_kgs].iterrows():
weight = int(float(lbs_row[3][:3]))
df.at[i, 3] = '{}kg'.format(weight)
# print(df)
# 拆分姓名列
df[['first_name', 'last_name']] = df[1].str.split(expand=True)
df.drop(1, axis=1, inplace=True)
# print(df)
# 去重
df.drop_duplicates(['first_name', 'last_name'], inplace=True)
# print(df)
#改个列名,调整列顺序
df.columns = ['Age', 'Weight', 'BWH1_man', 'BWH2_man', 'BWH3_man',
'BWH1_woman', 'BWH2_woman', 'BWH3_woman', 'first_name', 'last_name']
df = df[['first_name', 'last_name', 'Age', 'Weight', 'BWH1_man', 'BWH2_man', 'BWH3_man',
'BWH1_woman', 'BWH2_woman', 'BWH3_woman']]
# print(df)
#存入csv
df.to_csv('Message.csv')
结果如下