Python Pandas Index错误:列表索引超出范围

时间:2017-08-29 14:25:05

标签: python pandas loops indexing syntax-error

我的代码处理以前的数据集,现在停止工作了。我查看了此错误消息的其他答案,但似乎没有一个适用于我的。

我的数据框df中有一列用于Email_Address,我想将域拆分为新列。

我的数据帧是前一个df的子集。

#create new df, for only email addresses I need to review
df = df_raw.loc[df_raw['Review'] == 'Y'].copy()

#I reset the index to fix the problem, but it didnt help
df = df.reset_index(drop=True)

#ensure Email Address is a string
df['Email_Address']= df.Email_Address.apply(str)

#make Email Address lower case
df['email_lowercase'] = df['Email_Address'].str.lower()

#Split out domain into a new column 
df['domain'] = df['email_lowercase'].apply(lambda x: x.split('@')[1])

IndexError: list index out of range

1 个答案:

答案 0 :(得分:3)

您的数据框中很可能包含无效的电子邮件。 您可以使用

识别这些
df[~df.Email_Address.astype(str).str.contains('@')]

您可以使用此方法提取域

def extract_domain(email):
    email_domain = email.split('@')
    if len(email_domain) > 1:
        return email_domain[1]

df['domain'] = df['email_lowercase'].apply(extract_domain)

甚至更短:

df['domain'] = df['email_lowercase'].str.split('@').apply(lambda li: li[1] if len(li) > 1 else None)