一、drop_duplicates() 去重
# 语法:
drop_duplicates(subset=None, keep=‘first’, inplace=False, ignore_index=False)参数:
subset: 设置根据列的子集来判断重复值,默认根据DataFrame的所有列来判断重复值,即所有列的数据都相同时,才算重复值。如果指定了子集,则只要子集的这些列的数据都相同,就算重复值。
keep: 设置保留重复值中的哪一个,可以设置的值有{‘first’, ‘last’, False},默认first,如果有重复值,则保留第一个。设置为last,则保留重复值中的最后一个。设置为False,则删除所有的重复值,一个也不保留。
inplace: 作用同drop(),值为True时,直接修改原数据,不返回
ignore_index: 设置是否忽略行索引,默认False,去重后的结果的行索引保持原索引不变。如果设置为True,则结果的行索引被重置为0开始的自然数。# 示例:
df3 = pd.DataFrame({'A': ['a0', 'a1', 'a1', 'a2', 'a2'],'B': ['b0', 'b1', 'b1', 'b2', 'b2'],'C': ['c0', 'c1', 'c1', 'c2', 'c3']},index=['one', 'two', 'three', 'four', 'five']
)print(df3)
print('-'*20, '\n', df3.drop_duplicates(), sep='') # 对比所有行,行与行内的所有列的值都相同则执行去重,默认保留第一行。two和three相同,所以删除了three这行
print('-'*20, '\n', df3.drop_duplicates(subset=['A', 'B']), sep='') # 同时对比所有行A,B两列的值,行内的A、B列的值都相同则执行去重,默认保留第一行。two、three相同,four、five相同,所以删除了three 和 five两行。subset='A' ,就是按照A列的值去重
print('-'*20, '\n', df3.drop_duplicates(keep='last'), sep='') # 对比所有行,行与行内的所有列的值都相同则执行去重,保留最后一行。two和three相同,所以删除了four 这行
print('-'*20, '\n', df3.drop_duplicates(keep=False), sep='') # # 对比所有行,行与行内的所有列的值都相同则执行去重,不保留。two和three相同,所以删除了two和three两行
print('-'*20, '\n', df3.drop_duplicates(ignore_index=True), sep='') # ignore_index 设置为True,结果的行索引被重置为0开始的自然数"""A B C
one a0 b0 c0
two a1 b1 c1
three a1 b1 c1
four a2 b2 c2
five a2 b2 c3
--------------------A B C
one a0 b0 c0
two a1 b1 c1
four a2 b2 c2
five a2 b2 c3
--------------------A B C
one a0 b0 c0
two a1 b1 c1
four a2 b2 c2
--------------------A B C
one a0 b0 c0
three a1 b1 c1
four a2 b2 c2
five a2 b2 c3
--------------------A B C
one a0 b0 c0
four a2 b2 c2
five a2 b2 c3
--------------------A B C
0 a0 b0 c0
1 a1 b1 c1
2 a2 b2 c2
3 a2 b2 c3
"""
二、缺失值处理
- 如果缺失值没有使用NaN标记,比如使用"?",则可以先用
data = data.replace(to_replace='?',value=np.nan)
替换'?’ 为 np.nan,然后继续处理
- 检测所有内容是否不存在nan,可以用
np.all(df.notnull())
判断,结果为True,则没有缺失值
1. 判断函数:
df.isnull().any(axis) # 常用, 尽可能找到所有的空值。同 pd.isnull(df)
df.notnull().all(axis) # 常用,尽可能找到所有的空值。同 pd.notnull(df)获取缺失值的标记方式(NaN或者其他标记方式)如果缺失值的标记方式是NaN判断数据中是否包含NaN:df.isnull(),df.notnull()2. 过滤函数df.dropna() # 默认是删除有空的行df.dropna(axis=1) # 删除有空的列df.dropna(how='any') # 默认值,默认有空就会删除,注:不会修改原数据,需要接收返回值df.dropna(how='all', axis=1) # 所有的值都为空(整行或整列为空),才删除df.dropna(inplace=True) # inplace=True: 表示修改原数据3. 填充函数 Series/DataFramedf.fillna(value=100,inplace=True) # 填充df.fillna(value=100, limit=1, inplace=True)# limit: 限制对应维度上填充的次数df.fillna(method='ffill') # 用上面数据来填充自己df.fillna(method='bfill') # 用下面数据来填充自己df.fillna(method='ffill', axis=1) # 用左边数据来填充自己df.fillna(method='bfill', axis=1) # 用右边数据来填充自己
二、映射
1) replace()函数:替换元素
2) map()函数: 适合处理某一单独的列
3) rename()函数:替换索引
4) apply()函数:既支持 Series,也支持 DataFrame,用于接收一个自定义函数,来处理数据# 如:定义一个对yuwen 和lishi两列,求各自最大值-最小值的函数
d = df[['yuwen','lishi']].apply(lambda x:x.max()- x.min(),axis=0) # df[['yuwen','lishi']]是df对象的一种取值方式,先列后行规则5) transform()函数
三、异常值的检测和过滤
describe(): 查看每一列的描述性统计量df.std() : 可以求得DataFrame对象每一列的标准差df.drop(): 删除特定索引unique() : 唯一,去重query() : 按条件查询df.sort_values(): 根据值排序df.sort_index(): 根据索引排序df.info(): 查看数据信息
四、抽样
- 使用.take()函数排序
- 可以借助np.random.permutation()函数随机排序