【问题标题】:Saving segmented csv files after separating them by a column value按列值分隔后保存分段的 csv 文件
【发布时间】:2022-12-16 08:03:58
【问题描述】:

我正在尝试对包含姓名和电子邮件的 csv 文件进行分段。该文件包含名字、姓氏、电子邮件和电子邮件域。我需要按“企业”或“个人”电子邮件对它们进行分类。

数据如下所示: CSV File

import pandas as pd

data = pd.read_csv("C:\\Users\\Path\\to\\file\\5.csv")  

domains =['gmail.com',
'att.com',
'netzero.net',
'msn.com',
'yahoo.com',
'aol.com',
'bellsouth.net',
'hotmail.com',
'comcast.net',
'mail.com',
'verizon.net',
'ymail.com',
'live.com',
'netscape.net',
'icloud.com',
'cableone.net',
'alltel.net',
'worldnet.att.com',
'centurytel.net',
'earthlink.net',
'adelphia.com',
'alltell.net',]

individual = data.loc[data['Email-Domain'] == str(domains)]
business = data.loc[data['Email-Domain'] !== str(domains)]

print(individual[['First_Name_01','Last_Name_01','Email']])
print(business[['First_Name_01','Last_Name_01','Email']])

但是,当我运行此脚本时,它只为第一个输出打印一个空列表,然后在下一个输出中打印 csv 文件中的所有内容。

【问题讨论】:

  • ('First_Name_01','Last_Name_01','Email')

标签: python pandas csv data-science business-intelligence


【解决方案1】:

看起来你正在比较一个列表终止电子邮件(@ 之后的所有内容)与每封邮件.如果它们的终止位于指定的域内,您应该查看 csv 的电子邮件。需要更正两件事:从 csv 中仅使用电子邮件终止,而不检查字符串与列表的相等性 (==)。相反,检查每个邮件终止是否在域列表中。

你可以这样做:

individual = data[data['Email-Domain'].str.split(“@”)[-1].isin(domains)]
business = data[~data['Email-Domain'].str.split(“@”)[-1].isin(domains)]

【讨论】:

  • 实际上,当我对此进行测试时,我让它与“individual = data[data['Email-Domain'].isin(domains)]”和“business = data[~data['Email-Domain']”一起工作。 isin(domains)]" 根据您的 CSV 示例数据的组成。它不需要“str.split("@")”部分。
  • 完美的!我不太确定如何在不拆分的情况下将电子邮件“john.doe@gmail.com”映射到“gmail.com”,因为它应该将整个电子邮件地址与域进行比较。但如果它有效,我很高兴它有效?
  • 似乎@NoDakker 解决方案工作正常。另一个解决方案不断抛出错误......
猜你喜欢
  • 1970-01-01
  • 2012-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-24
  • 1970-01-01
相关资源
最近更新 更多