Python 用特定字符串替换/移动值[熊猫]
我得到了这样一个脏数据集,例如,如果电子邮件填写在电话栏中,我需要将电子邮件移动到电子邮件栏,并将电话栏留空,如果电子邮件和电话填写在错误的位置,如A03,我需要将它们交换到正确的栏位Python 用特定字符串替换/移动值[熊猫],python,pandas,csv,dataframe,data-cleaning,Python,Pandas,Csv,Dataframe,Data Cleaning,我得到了这样一个脏数据集,例如,如果电子邮件填写在电话栏中,我需要将电子邮件移动到电子邮件栏,并将电话栏留空,如果电子邮件和电话填写在错误的位置,如A03,我需要将它们交换到正确的栏位 ID Phone Email A01 111111 abc@mail.com A02 bcd@mail.com NaN A03 def@mail.com 222222
ID Phone Email
A01 111111 abc@mail.com
A02 bcd@mail.com NaN
A03 def@mail.com 222222222
目前,我可以删除手机栏中所有带有电子邮件地址的手机,但我不知道如何比较这两个栏并交换它们
eduDup['phone'] = eduDup.phone.str.replace(r'(^.*@.*$)', 'aaaaaaaaaaaaaaaa sport')
使用sorted with re.findall:
输出:
ID Phone Email
0 A01 111111 abc@mail.com
1 A02 bcd@mail.com
2 A03 222222222 def@mail.com
见解:
对于df[['Phone','Email']]中的t。值:逐行迭代电话和电子邮件列:
[('111111', 'abc@mail.com'),
('bcd@mail.com', ''),
('def@mail.com', '222222222')]
sortedt,key=lambda x:re.findallr'^.*.*.$',x现在对每个元组t进行排序,检查元组的元素是否是电子邮件。查看在没有排序的情况下会发生什么,然后只应用lambda:
现在使用key=f排序将通过使用f检查元素进行排序。应用键后,空列表将出现在前面,因为空列表[]的计算结果为False,而[…]的计算结果为True:请使用[]<[1]进行检查
其结果是:
[['111111', 'abc@mail.com'],
['', 'bcd@mail.com'],
['222222222', 'def@mail.com']]
这就是期望的输出 使用与re.findall一起排序:
输出:
ID Phone Email
0 A01 111111 abc@mail.com
1 A02 bcd@mail.com
2 A03 222222222 def@mail.com
见解:
对于df[['Phone','Email']]中的t。值:逐行迭代电话和电子邮件列:
[('111111', 'abc@mail.com'),
('bcd@mail.com', ''),
('def@mail.com', '222222222')]
sortedt,key=lambda x:re.findallr'^.*.*.$',x现在对每个元组t进行排序,检查元组的元素是否是电子邮件。查看在没有排序的情况下会发生什么,然后只应用lambda:
现在使用key=f排序将通过使用f检查元素进行排序。应用键后,空列表将出现在前面,因为空列表[]的计算结果为False,而[…]的计算结果为True:请使用[]<[1]进行检查
其结果是:
[['111111', 'abc@mail.com'],
['', 'bcd@mail.com'],
['222222222', 'def@mail.com']]
这就是期望的输出 谢谢,看起来很棒!我仍然有点困惑,sorted with for循环如何帮助将数据组织在正确的位置它通过检查是否有任何类似电子邮件的格式,将电话、电子邮件对和重新排序,并逐行执行此操作。让我编辑一下,给你一些见解。谢谢,看起来很棒!我仍然有点困惑,sorted with for循环如何帮助将数据组织在正确的位置它通过检查是否有任何类似电子邮件的格式,将电话、电子邮件对和重新排序,并逐行执行此操作。让我来编辑一下,以提供一些见解。