【python】数据清洗

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
df
tb
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.删除列/行

  • 列axis=1;行axis=0
df.drop(['',''],axis=1,inplace=True)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容