Python Pandas从lis中删除包含值的行

2024-09-30 01:22:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在比较两个大的CSV和熊猫都包含联系信息。我想从一个CSV中删除包含另一个CSV中任何电子邮件地址的行。在

所以如果我有

DF1型

name phone email
1    1     hi@hi.com
2    2     bye@bye.com
3    3     yes@yes.com

DF2型

^{pr2}$

我会留下

DF3型

name phone email
1    1     hi@hi.com

我不关心任何列,除了电子邮件地址。这看起来很容易,但我真的很难对付这个。在

以下是我所拥有的,但我认为这还不够接近:

def remove_warm_list_duplicates(dataframe):
    '''Remove rows that have emails from the warmlist'''
    warm_list = pd.read_csv(r'warmlist/' + 'warmlist.csv'
                            , encoding="ISO-8859-1"
                            , error_bad_lines=False)
    warm_list_emails = warm_list['Email Address'].tolist()
    dataframe = dataframe[dataframe['Email Address'].isin(warm_list_emails) == False]

Tags: csvnamecomdataframe电子邮件email地址phone
3条回答

你可以使用pandas isin()

df3 = df1[~df1['email'].isin(df2['email'])]

结果df

^{pr2}$

您可以使用unique()和集合简化一点:

warm_list = pd.read_csv(r'warmlist/' + 'warmlist.csv',
                        encoding="ISO-8859-1",
                        error_bad_lines=False)

warm_list_emails = set(warm_list['Email Address'].unique())
df = df.loc[df['Email Address'].isin(warm_list_emails), :]

试试这个:

In [143]: pd.merge(df1, df2[['email']], on='email', how='left', indicator=True) \
            .query("_merge == 'left_only'") \
            .drop('_merge',1)
Out[143]:
   name  phone      email
0     1      1  hi@hi.com

相关问题 更多 >

    热门问题