我有一份包含用户数据的csv文件,但由于某些原因,该文件将电子邮件名称和电子邮件域名分为两列。同时,有些用户拥有多个电子邮件。我想将它们合并成一个电子邮件或者一个电子邮件列表,视情况而定。
例子:
emailname | emaildomain
john.smith; smithj | gmail.com, biz.net
sample.name | aol.com
我想把那个改为:
email
[john.smith@gmail.com, smithj@biz.net]
[sample.name@aol.com]
接下来,它将被推送到一个字典中,在那里我将不得不迭代每个单元格中的每个值,并从中创建一个条目,这方面我有一个大致的想法,可以使用基本的Python或遵循类似的逻辑。
我能够使用df['email name'] = df['email name'].str.split(';')
将每个字段拆分为列表,这样每个字段的每个值都对应一个列表。然而,我卡在了如何将它们连接成一个单一字段上。
在纯Python中,我会这样做:
emaillist = []
for i in emailname: #where the assumption is there is a 1:1 relationship between each name and domain
e = '@'.join(emailname[i],emaildomain[i])
emaillist.append(e)
但在Pandas中,我不确定如何获取数据框单元格中列表的索引。理想情况下,我还想跳过任何空行,但如果只创建一个类似于[@]
的“空”列表,那么没关系,我可以稍后解决。
AttributeError: 'list object has no attribute 'split'
。我重新做了一遍,没有事先分割多值单元格,结果合并得不正确,变成了['john.smith;smithj@gmail.com;biz.net]'
。我尝试将.split(';')
移到列表推导式的第二行,但还是出现了错误:AttributeError: Can only use .str accessor with string values!
。 - nos codemosdf = df.dropna()
,它能正常工作吗? - jezrael[@]
的列表。执行dropna()
没有任何效果。 - nos codemosL = [['@'.join(z) for z in zip(*[y.split(',') for y in x])] for x in zip(df['emailname'].astype(str),df['emaildomain'].astype(str))]
吗? - jezrael