python数据清洗语句_【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

da9279ea1eba?utm_campaign=haruki

df

da9279ea1eba?utm_campaign=haruki

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.修改列名称

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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值