【问题标题】:deleting rows from csv based on cell contents from another csv根据另一个 csv 中的单元格内容从 csv 中删除行
【发布时间】:2018-09-22 09:35:54
【问题描述】:

我正在从 csv 抓取 url 列表,并从每个 url 中提取数据帧信息并将其导出到 csv。当它到达一个没有任何信息的页面时它会停止。我想从第一个文件中删除我已经根据从第二个文件收集的许可证号抓取的网址(它们包含许可证号)。我可以通过使用帮助列在 excel 中轻松做到这一点,但不知道如何使用 pandas 来做到这一点。

例如: 我想根据 file2 中的 Lic # 删除 file1 中的前 2 行(url)。

File1(no headers)
www.1234.com
www.1235.com
www.1236.com

File2(LIC# is the header)
1234
1235

new urls (expected output back into File1)
www.1236

我已经查看了这里的许多示例,但无法理解它。

感谢任何 cmets 和/或建议。

【问题讨论】:

  • 你能展示数据集和预期输出的玩具示例吗?
  • 我在最初的问题中提供了它们,但更新了措辞以反映您的要求。我相信。

标签: python pandas dataframe


【解决方案1】:

将您的 2 个列表存储在 x 和 a 变量中:

x=['www.1234.com','www.1235.com','www.1236.com']
a=['1234','1235']

附加www。和 .com 到您的第二个列表并存储在变量 b

b=[]
for i in a:
    b.append('www.'+i+'.com')

创建你想要的输出

y = [s for s in x if s not in b]
y

【讨论】:

  • 如果答案对您有帮助,请接受并投票。谢谢:)
  • 我刚刚更新了最初的问题,以澄清列名和预期输出。对于任何混淆,我深表歉意。
【解决方案2】:

首先,创建一个只包含 url 中间部分的新列

df1['site'] = dfs['dataset1'].apply(lambda x:x.split('.')[1])

然后,内部连接两个数据框

df = df1.merge(df2,how='inner',left_on='site',right_on='dataset2')

df 包含所需的输出。 (我假设 dataset1 和 dataset2 是列名)

【讨论】:

  • 我刚刚更新了最初的问题,以澄清列名和预期输出。对于任何混淆,我深表歉意。
【解决方案3】:

如果两者都是不同的大尺寸数据框,您可以使用连接,也可以通过迭代检查 df

df
    File1(no headers)
0   www.1234.com
1   www.1235.com
2   www.1236.com

df1
    File2(LIC# is the header)
0   1234
1   1235

df = df[~df['File1(no headers)'].apply(lambda y: any(map(lambda x :str(x) in y,df1['File2(LIC# is the header)'].tolist())))].reset_index(drop=True)

输出:

    File1(no headers)
0   www.1236.com

【讨论】:

  • 我刚刚更新了最初的问题,以澄清列名和预期输出。对于任何混淆,我深表歉意。
  • 我刚刚编辑了我的回复以适合你的列名@RobK
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-19
相关资源
最近更新 更多