【发布时间】:2022-01-21 12:36:57
【问题描述】:
我在数据框的列中有一个列表:
emaildf['email'][0] = ["abc@gmail.com","abc@yahoo.com","abc@abc.com"]
我想遍历每一行(假设 i)并匹配 i 中的对象(假设 j)是否包含子字符串:例如:
for i in emaildf['email']:
for j in i:
do_something:
这是我的代码:
Private_Email = []
for index,row in emaildf.iterrows():
for i in row['email']:
if len(re.findall("gmail|hotmail|yahoo|msn", row['email'])) > 0:
Private_Email.append(row['email'])
else:
Private_Email.append('No Gmail/Hotmail/MSN/Yahoo domains found.')
emaildf['Private_Email'] = Private_Email
这是我得到的错误:
----> 4 if len(re.findall("gmail|hotmail|yahoo|msn", row['email'])) > 0: TypeError: expected string or bytes-like object
注意: 输入:
re.findall("gmail|hotmail|yahoo|msn", "abc@gmail.com")
输出:
['gmail']
这就是我检查列表长度的原因。
【问题讨论】:
-
您的意思可能是
for j in i不是for j in in emaildf['email'][i],因为i是数据,而不是列表索引。 -
是的,谢谢,改了。
-
代码中的哪一行现在为您提供
TypeError? -
第 4 行 - 我已经编辑了问题
-
不知道为什么将这个问题关闭为“需要调试详细信息”,它们位于问题的顶部。请注意,您应该避免在数据帧上使用
re.findall,因为您不使用矢量化 Pandas 函数。