【问题标题】:filter a csv file by partial string matching for a column通过列的部分字符串匹配过滤 csv 文件
【发布时间】:2015-06-24 23:32:31
【问题描述】:

我有一个大的 csv 文件(包含 21 列)。该文件包含用户最近几天的数据。我想根据列值过滤这个文件。该列是“注销时间”。列值类似于“Mon Jun 15 11:12:12 EST 2015”。我想为那些“注销时间”为“Mon Jun 15”的记录制作一个单独的 csv 文件,无论时间如何。 我尝试使用熊猫来做到这一点。为了获得这些记录,我尝试了这个:

df[df['Logout Time'].str.contains("Mon Jun 15")]

这给了我错误:

ValueError : 无法使用包含 NA / NaN 值的向量进行索引

我也试过这个:

df[df['Logout Time'].str.contains("Mon Jun 15") == True]

这不会过滤结果。它给了我原始 csv 的全部记录。

【问题讨论】:

  • 你能发布df.info()的输出吗?什么是注销时间?是 str 还是 datetime dtype?除非您没有匹配项,否则您的第一次尝试应该会成功,df['Logout Time'].str.contains("Mon Jun 15") 显示什么?
  • 我将该列的 dtype 视为对象,既不是 str 也不是 datetime。 df['Logout Time'].str.contains("Mon Jun 15") 显示值错误 ValueError : cannot index with vector contains NA / NaN values
  • df['Logout Time'].dropna().str.contains("Mon Jun 15") 有什么回报吗?
  • 是的..它给了我匹配的布尔输出(真/假)
  • df[df['Logout Time'].dropna().str.contains("Mon Jun 15")] 工作吗?

标签: python csv pandas


【解决方案1】:

您的问题是您的数据包含 NaN 值,因此您需要先使用 dropna 删除它们:

df[df['Logout Time'].dropna().str.contains("Mon Jun 15")]

所以上面应该可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-31
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 2019-09-19
    相关资源
    最近更新 更多