Python Pandas-删除包含Nan的行,然后删除所有关联行
我有一个数据框,有两列:“年龄”和“姓名”。如下所示(在记事本中打开时): (第一列是索引) 我需要在age列中删除任何带有Nan的行,并在name列中删除任何具有相同名称的行。例如,在我的数据框的片段中,我希望删除包含Bill的两行,因为其中一行包含Nan 目前我有:Python Pandas-删除包含Nan的行,然后删除所有关联行,python,pandas,Python,Pandas,我有一个数据框,有两列:“年龄”和“姓名”。如下所示(在记事本中打开时): (第一列是索引) 我需要在age列中删除任何带有Nan的行,并在name列中删除任何具有相同名称的行。例如,在我的数据框的片段中,我希望删除包含Bill的两行,因为其中一行包含Nan 目前我有: df_no_dups = dp[dp.isfinite(dp['age'])] 这是第一部分,但我一直在删除与包含Nan的行同名的其他行 如果每个组的值没有缺失值,则使用为测试创建的布尔掩码进行筛选将非常有帮助: df1 =
df_no_dups = dp[dp.isfinite(dp['age'])]
这是第一部分,但我一直在删除与包含Nan的行同名的其他行
如果每个组的值没有缺失值,则使用为测试创建的布尔掩码进行筛选将非常有帮助:
df1 = df[df['age'].notnull().groupby(df['name']).transform('all')]
或检查缺失值,测试每组是否至少有一个为True
,以及最后一次通过~
反转布尔掩码:
df1 = df[~df['age'].isnull().groupby(df['name']).transform('any')]
详细信息:
print (df['age'].notnull())
0 True
1 True
2 False
3 True
Name: age, dtype: bool
print (df['age'].notnull().groupby(df['name']).transform('all'))
0 False
1 True
2 False
3 True
Name: age, dtype: bool
如果每个组的值没有缺失值,则使用为测试创建的布尔掩码进行筛选:
df1 = df[df['age'].notnull().groupby(df['name']).transform('all')]
或检查缺失值,测试每组是否至少有一个为True
,以及最后一次通过~
反转布尔掩码:
df1 = df[~df['age'].isnull().groupby(df['name']).transform('any')]
详细信息:
print (df['age'].notnull())
0 True
1 True
2 False
3 True
Name: age, dtype: bool
print (df['age'].notnull().groupby(df['name']).transform('all'))
0 False
1 True
2 False
3 True
Name: age, dtype: bool
试试这个
df=df.drop_duplicates(subset=['name'],keep=False)
df[(df['age'].notnull()] #or df[(df['age']!='Nan')] (as your input Contains Nan as string)
说明:
首先删除重复项并传递keep=False
以删除所有重复项。然后过滤NaN
输出:
age name
1 22 Harry
4 5 William
试试这个
df=df.drop_duplicates(subset=['name'],keep=False)
df[(df['age'].notnull()] #or df[(df['age']!='Nan')] (as your input Contains Nan as string)
说明:
首先删除重复项并传递keep=False
以删除所有重复项。然后过滤NaN
输出:
age name
1 22 Harry
4 5 William
这对我很有用:
import pandas as pd
df = pd.read_excel('test.xlsx')
df = df.drop_duplicates(subset='name', keep=False)
df = df.dropna(subset=['age'])
编辑:这适用于空值,如果Nan是@Mohamed指出的字符串,则使用他提供的答案。这适用于我:
import pandas as pd
df = pd.read_excel('test.xlsx')
df = df.drop_duplicates(subset='name', keep=False)
df = df.dropna(subset=['age'])
编辑:这适用于空值,如果Nan是@Mohamed指出的字符串,则使用他提供的答案。是的,这很有效,谢谢,转换('any')的目的是什么?我编辑答案,更好吗?如果有什么不清楚的地方,告诉我,我试着解释更多。谢谢。是的,这很有效,谢谢,转换('any')的目的是什么?我编辑答案,这样更好吗?如果有什么不清楚的地方,告诉我,我试着解释更多。谢谢。这和我的答案很相似