pandas主要有三个用来删除的函数,.drop()、.drop_duplicates()、.dropna()。总结如下
.drop()删除行、列
.drop_duplicates()删除重复数据
.dropna()删除空值(所在行、列)
为避免篇幅太长,将其分为两部分,不想看参数介绍的可以直接看实例。
本篇介绍.drop_duplicates(), df.dropna
drop_duplicates()的用法
df.drop_duplicates() 则通常用于数据去重,即剔除数据集中的重复值。官方解释很详细,下面做一些解读。
官方解释:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.drop_duplicates.html#pandas.DataFrame.drop_duplicates
DataFrame.drop_duplicates(subset=None, keep='first', inplace=False)
Return DataFrame with duplicate rows removed, optionally only considering certain columns.
#返回一个去除了重复行的df,也可以选择删除重复列
Parameters:
subset : column label or sequence of labels, optional
subset:可以选择列标签或者标签顺序
Only consider certain columns for identifying duplicates, by default use all of the columns
#只删除某些指定列含有重复值的情况,默认情况下使用所有列
keep : {‘first’, ‘last’, False}, default ‘first’(默认'first')
first : Drop duplicates except for the first occurrence.
#删除除第一次出现外的重复项。
last : Drop duplicates except for the last occurrence.
#删除重复项(最后一次发生的除外)。
False : Drop all duplicates.
#删除所有的重复项(一个也不留)
inplace : boolean, default False
Whether to drop duplicates in place or to return a copy
#确定是否在原数据上进行修改
下面时代码实例
dic = {'A': [1, 2, 1, 1], 'B': [2, 5, 2, 4],
'C': [3, 5, 3, 10], 'D': [4, 9, 4, 5]}
df = pd.DataFrame(dic, index=['one', 'two', 'three', 'four'])
print(df)
A B C D
one 1 2 3 4
two 2 5 5 9
three 1 2 3 4
four 1 4 10 5
#默认删除所有每一列都相同的重复行(保留第一行)
df.drop_duplicates()
#删除指定列重复的某些行(保留第一行)
df.drop_duplicates(subset='A')
#删除所有每一列都相同的重复行(保留最后一行)
df.drop_duplicates(keep='last')
#删除所有重复行(一个不留)
df.drop_duplicates(keep=False)
#以上步骤均不再原数据上更改
print(df)
#inplace=True时,直接在原数据上更改
df.drop_duplicates(inplace=True)
print(df)
dropna()的用法
df.dropna 用于删除缺少值,即数据集中空缺的数据列或行。官方给的解释很详细,不做赘述,翻译一下即可。
官方解释:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.dropna.html#pandas.DataFrame.dropna
DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
Remove missing values.
去除缺失值
Parameters:
axis : {0 or ‘index’, 1 or ‘columns’}, default 0(默认0)
Determine if rows or columns which contain missing values are removed.
#确定删除缺失值所在行还是列
0, or ‘index’ : Drop rows which contain missing values.
#0或者'index',删除缺失值所在行
1, or ‘columns’ : Drop columns which contain missing value.
#1或者'columns',删除缺失值所在列
how : {‘any’, ‘all’}, default ‘any’(默认'any'
Determine if row or column is removed from DataFrame, when we have at least one NA or all NA.
#当行或列至少有一个缺失值,是否将其删除
‘any’ : If any NA values are present, drop that row or column.
#存在任何缺失值,就将该行或列删除
‘all’ : If all values are NA, drop that row or column.
#只有当该行或列所有值都为缺失值,才删除该行或列
thresh : int, optional
Require that many non-NA values.
#只保留至少有规定的(thresh的值)非na值的行。
subset : array-like, optional
Labels along other axis to consider, e.g. if you are dropping rows these would be a list of columns to include.
#沿着其他轴的标记要考虑,例如如果要删除行,则这些列将包含要包含的列。
inplace : bool, default False
If True, do operation inplace and return None.
如果为True,则直接在原数据改动
下面是代码实例
df = pd.DataFrame({'name': ['Alfred', 'Batman', 'Catwoman', np.nan],
'toy': [np.nan, 'Batmobile', 'Bullwhip', np.nan],
'born': [pd.NaT, pd.Timestamp('1940-06-25'), pd.NaT, np.nan]})
print(df)
#默认删除所有有缺失值的行
df.dropna()
#删除所有含有缺失值的列
df.dropna(axis=1)
df.dropna(axis='columns')
#只删除所有都为缺失值的行
df.dropna(how='all')
#只删除指定列中含有缺失值的行
df.dropna(subset=['name', 'toy'])
#以上操作均不改动原数据,inplace=True直接在原数据改动
print(df)
df.dropna(inplace=True)