1.处理缺失值
判断是否含缺失值/统计缺失值
#判断
## 判断列是否存在na
df.isnull().any() #返回bool
df.notnull()
#统计
df.isnull().sum()
df['col_name'].value_counts(dropna=False) #分类汇总该列并统计缺失值
筛选所有含缺失值的表格
df[df.col_name.isnull()]
删除含缺失值的数据
df.dropna(how = 'any') #只要含有缺失值就删除数据
df.dropna(how = 'all') #行数据要全部缺失,才会删除该行
df.dropna(subsey=['col_1','col_2'], how = 'any') #col_1和col_2任意一个含缺失值,则删除改行数据
df.dropna(subsey=['col_1','col_2'], how = 'all') #两列都含缺失值,删除
用新值填充空值
#用新值填充缺失值
df['col_name'].fillna(value = 'new_value',inplace = True)
#用0填充
df[''].fillna(value=0)
#用前值
df[''].fillna(method='ffill')
#用后值
df[''].fillna(method='bfill')
#用均值
df[''].fillna(df[''].mean(),inplace=True) #inplace=true时,原数据改变,否则不变
对应值替换
(1)用DataFrame的 loc/iloc
for i in range(len(tb)):
if np.isnan(tb.loc[i,'value']):
tb.loc[i,'value'] = df[tb.loc[i,'weekday']] # df.loc[tb.iloc[i,1],0]
(2)用apply()
# 或者自己写函数, 用apply()
col= ['weekday','value']
def func(col):
weekday = col[0]
value = col[1]
if pd.isnull(value):
if weekday == 'Mon':
return 4444
elif weekday == 'Fri':
return 5555
else:
return value
tb['value'] = tb[col].apply(func, axis = 1)
2.清除某一列的字符空格
df['']=df[''].map(str.strip)
3.大小写转换
df['']=df[''].str.lower()
4.更改数据格式
df['id'].astype('str')
5.修改列名称
link
DataFrame.rename(mapper=None, index=None, columns=None, axis=None, copy=True, inplace=False, level=None)
'''
参数:
mapper, index, columns : 映射的规则。
axis:指定轴,可以是轴名称('index','columns')或数字(0,1),默认为index。
copy:布尔值,默认为True,复制底层数据。
inplace:布尔值,默认为False。指定是否返回新的DataFrame。如果为True,则在原df上修改,返回值为None。
level:int或level name,默认为None。如果是MultiIndex,只重命名指定级别的标签。
'''
df = df.rename(columns={'gender':'性别','A':'B'})
df.columns = df.columns.str.replace('','_')
6.重复值处理
6.1 查询重复值
#对某一列
df.col_name.duplicated() #返回bool,true>>>前面出现过了
df.col_name.duplicated().sum() #总计
#对多列
df.duplicates(subset= ['col_1','col_2'])
#对全表
df.loc[df.duplicated(),:] #查询含重复值的所有数据
df.loc[df.duplicated(keep='first'),:] #第一次出先的结果被保留,后面出现的重复对象被筛选出
df.loc[df.duplicated(keep='last'),:]
df.loc[df.duplicated(keep='False'),:] #mark all duplicates
6.2 删除重复值
#对某一列
df[''].drop_duplicates()
df[''].drop_duplicates(keep='last') #删除前重复值,保留后; keep:first
#对多列
df.drop_duplicates(subset= ['col_1','col_2']) #subset 默认none对所有去重;subset自定义列去重
#对全表
df.drop_duplicates(keep='')
7.数据值替换
df['education'].replace('本科','大学')
8.删除列/行
df.drop(['',''],axis=1,inplace=True)