【问题标题】:CSV Dictionary to filter a CSV fileCSV 字典过滤 CSV 文件
【发布时间】:2018-07-16 15:34:04
【问题描述】:

我正在将 Python 3.6 与 pandas 和 numpy 一起使用。 我有两个 CSV 文件,都没有包含任何标题(所以索引是内置的)。一个是带有计算机名的单列列表: PC001 PC002 PC003 ...

另一个文件是系统的导入文件。它是一个 csv 文件。电脑名称是第三列: addprinter,终端,PC001,东西,东西 addprinter,终端,PC002,东西,东西 addprinter,终端,PC003,东西,东西 ...

现在导入文件包含数千个条目,我只需要将行复制到一个新的 csv(将其命名为 to-be-imported.csv),其中包含来自我们称之为 hostnames.csv 的 pc 名称

我在这里使用这个来“接近”:

np.intersect1d(df_main[2],df_key[0])

不幸的是,它只会列出在巨大的 csv 中找到的电脑名称,但不会列出包含名称的行(因此它可以很容易地写入新的 csv)。

我知道这对我来说是进步,但我也相信我会学到很多东西。所以希望有一个善良的灵魂理解我想做什么并分享一些指导

【问题讨论】:

  • 只是为了检查我的理解是否正确-您有两个 .csv 文件,并且您只想从大型导入文件中获取记录,其中 PC 名称在您的 hostnames.csv 文件中,对吗?
  • @Ben 是的,这是正确的。所以在脚本中我做了这样的事情: 加载 df1 hugedatafile.csv 加载 df2 hostnames.csv 检查 hostnames.csv 中的第一个条目(位于第一列)是否与巨大数据文件中的任何内容匹配(huge.csv - 主机名在第三列)。如果是这样,请将完整的行(addprinter、terminal、PC001、...、...)复制/写入新的 csv(to-be-imported.csv)。继续比较和复制(如果匹配)直到文件结束。然后检查 hostnames.csv 中的第二个条目(第 1 列,第 2 行),依此类推,直到检查 hostnames.csv 中的最后一个条目是否匹配。

标签: python pandas csv numpy export-to-csv


【解决方案1】:

如回答here,您可以使用isin

hosts = pd.read_csv('hostnames.csv', header=None, names=['hosts'], squeeze=True)
df = pd.read_csv('import.csv', header=None, names=['a', 'b', 'host', 'c'])
result = df.loc[df['host'].isin(hosts)]

然后将结果写入带有to_csv 的CSV 文件。

【讨论】:

  • 非常感谢!需要注意的重要一点:对于“df”行,字母必须与实际列的数量相匹配。在我的文件中,我有 6 列,所以我必须添加 'd','e' ... 然后它就像一个魅力。现在我将继续输出(写入 csv),然后就完成了。谢谢你:)
猜你喜欢
  • 2011-09-20
  • 1970-01-01
  • 2019-09-15
  • 1970-01-01
  • 2016-09-03
  • 1970-01-01
  • 1970-01-01
  • 2018-04-18
  • 1970-01-01
相关资源
最近更新 更多