Python 从世界其他地区收到第一封合法电子邮件,熊猫

Python 从世界其他地区收到第一封合法电子邮件,熊猫,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据集,其中我们有一个客户端的多个电子邮件列,例如 主要电子邮件 个人电子邮件 工作电子邮件 联系电子邮件 我从中提取这些信息的系统不会将电子邮件记录折叠下来。这意味着我可以填写联系人电子邮件,但不能作为主要电子邮件。有没有一种方法可以使用Pandas根据一封好邮件的第一个实例,雄辩地将数据折叠到主邮件列中?我知道我可以通过循环整个过程,做几个if/else语句,在每一列中不断查找,直到得到一个正确的结果,从而在某种程度上强制实现这一点,但这感觉不是很像python 例:输入 Email

我有一个数据集,其中我们有一个客户端的多个电子邮件列,例如

主要电子邮件 个人电子邮件 工作电子邮件 联系电子邮件 我从中提取这些信息的系统不会将电子邮件记录折叠下来。这意味着我可以填写联系人电子邮件,但不能作为主要电子邮件。有没有一种方法可以使用Pandas根据一封好邮件的第一个实例,雄辩地将数据折叠到主邮件列中?我知道我可以通过循环整个过程,做几个if/else语句,在每一列中不断查找,直到得到一个正确的结果,从而在某种程度上强制实现这一点,但这感觉不是很像python

例:输入

Email 1,    Email 2,   Email 3,    Email 4
                                   1@.com
            2@.com     4@.com
变成

Email 1,    Email 2,   Email 3,    Email 4
1@.com                             1@.com
2@.com      2@.com     4@.com
让我们试试bfill,如果没有NaN,在下面运行之前,先执行df=df.replace{:np.NaN}

df['Email 1']=df.bfill(1).iloc[:,0]
让我们试试bfill,如果没有NaN,在下面运行之前,先执行df=df.replace{:np.NaN}

df['Email 1']=df.bfill(1).iloc[:,0]

可以使用pandas apply函数完成,您可以尝试以下操作

df['Email 1'] = df.apply(lambda x: x.dropna()[0], axis=1)

希望这有帮助。

可以使用熊猫应用功能来完成,您可以尝试以下操作

df['Email 1'] = df.apply(lambda x: x.dropna()[0], axis=1)

希望这有帮助。

您也可以尝试使用空格和NaN:

s = df.stack()
df['Email 1'] = s.where(s.str.contains('@')).groupby(level=0).first()

您还可以尝试使用空格和NaN:

s = df.stack()
df['Email 1'] = s.where(s.str.contains('@')).groupby(level=0).first()

丢失的电子邮件是空字符串?不一定,我只会向前推电子邮件字符串,如果它包含@,那么它也可能是NaN?99%的时间它是NaN。只有一些边缘案例,人们认为输入他们不应该输入的内容是合适的。我有超过4万条记录,所以仍然有数百条例外。在我处理电子邮件的其他地方,我发现简单地使用“@”作为匹配条件更容易。丢失的电子邮件是空字符串?不一定,我只会向前推电子邮件字符串,如果它包含@,那么它也可能是NaN?99%的时间是NaN。只有一些边缘案例,人们认为输入他们不应该输入的内容是合适的。我有超过4万条记录,所以仍然有数百条例外。在我处理电子邮件的其他地方,我发现简单地使用“@”作为匹配条件更容易。我需要制定出只适用于电子邮件列的逻辑,但这应该可以做到谢谢。我需要制定出只适用于电子邮件列的逻辑,但这应该可以做到谢谢。这也行得通,我只有一半明白发生了什么。@Sam如果YOBEN的答案有效,那就是正确的答案,这个答案专门针对无效值,其中电子邮件没有@,但包含其他字符串值。因为这是用@per row提取第一个值,这也起作用了,我只了解了一半。@Sam如果YOBEN的答案有效,那就是正确的方法,这个答案专门针对无效值,其中电子邮件没有@,但包含其他字符串值。因为这会以每行@提取第一个值