以下为对文中的案例进行编码操作,有三个问题请教
1、重量【‘weight’】一列的数据,如何利用平均值进行填充,因为该列是字符类型,无法求平均。目前采用高频数据填充
2、Pink Panther用户的三围数据如何填充?,我想利用对应性别的平均值填充
3、案例中,后6列不显示‘NaN’,是因为填充列‘空格’吗?
_____________________
import pandas as pd
## 导入数据
df=pd.read_csv('第11节数据.csv')
## 重命名列名columns
df.rename(columns={'0':'Number','1':'Name','2':'Age','3':'Weight','4':'m0006','5':'m0612','6':'m1218'
,'7':'f0006','8':'f0612','9':'f1218'},inplace=True)
#2.全面性
#列数据统一单位
# 获取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)
#1.完整性
# 删除全空的行
df.dropna(how='all',inplace=True)
##缺失值补充方式一
## df[‘Age’] 中缺失的数值用平均年龄进行填充
#df['Age'].fillna(df['Age'].mean(),inplace=True)
## 缺失值补充方式二
## 使用Age一列高频数据进行填充
age_maxf=df['Age'].value_counts().index[0]
df['Age'].fillna(age_maxf,inplace=True)
## 使用Weight一列高频数据进行填充
weight_maxf=df['Weight'].value_counts().index[0]
df['Weight'].fillna(weight_maxf,inplace=True)
#4.唯一性
#Name拆分为firstname和lastname
#切分名字,删除源数据列
df[['first_name','last_name']]=df['Name'].str.split(expand=True)
df.drop('Name',axis=1,inplace=True)
# 移动first_name和last_name这俩列
first_name=df.pop('first_name')
df.insert(1,'first_name',first_name)
last_name=df.pop('last_name')
df.insert(2,'last_name',last_name)
#删除重复数据行
df.drop_duplicates(['first_name','last_name'],inplace=True)
#3.合理性
# 删除非ASCII字符
df['first_name'].replace({r'[^\x00-\x7F]+':''},regex=True,inplace=True)
df['last_name'].replace({r'[^\x00-\x7F]+':''},regex=True,inplace=True)
df
展开