【问题标题】:Deleting rows with certain keywords of csv file删除带有csv文件某些关键字的行
【发布时间】:2016-06-23 06:10:05
【问题描述】:

我有一个大数据文件,我需要删除包含某些关键字的行。

这是我正在使用的文件的示例:

User Name     DN
MB31212       CN=MB31212,CN=Users,DC=prod,DC=trovp,DC=net
MB23423       CN=MB23423 ,OU=Generic Mailbox,DC=prod,DC=trovp,DC=net
MB23424       CN=MB23424 ,CN=Users,DC=prod,DC=trovp,DC=net
MB23423       CN=MB23423,OU=DNA,DC=prod,DC=trovp,DC=net
MB23234       CN=MB23234 ,OU=DNA,DC=prod,DC=trovp,DC=net

这是我导入文件的方式:

import pandas as pd
df = pd.read_csv('sample.csv', sep=',', encoding='latin1')

我该怎么做

  1. 例如删除 DN 列中包含“OU=DNA”的所有行?
  2. 如何删除 DN 列中的第一个属性“CN= x”而不删除该列中的其余数据?

我想得到类似于下面发布的内容,删除了包含“OU=DNA”的 2 行,并从每一行中删除了“CN=x”:

User Name     DN
MB31212       CN=Users,DC=prod,DC=trovp,DC=net
MB23423       OU=Generic Mailbox,DC=prod,DC=trovp,DC=net
MB23424       CN=Users,DC=prod,DC=trovp,DC=net

【问题讨论】:

  • 我建议使用 grep 删除行,使用 awk 删除列

标签: python python-3.x pandas


【解决方案1】:

您可以尝试将此两步过滤作为您的逻辑。使用str.contains 方法过滤掉带有OU=DNA 的行,并使用str.replace 方法和正则表达式修剪前导CN=x:

newDf = df.loc[~df.DN.str.contains("OU=DNA")]
newDf.DN = newDf.DN.str.replace("^CN=[^,]*,", "")
newDf

    UserName    DN
0   MB31212 CN=Users,DC=prod,DC=trovp,DC=net
1   MB23423 OU=Generic Mailbox,DC=prod,DC=trovp,DC=net
2   MB23424 CN=Users,DC=prod,DC=trovp,DC=net

正则表达式的一点分解:^ 代表字符串的开头,后面是CN=,并使用[^,]*, 捕获模式,直到第一个逗号;

【讨论】:

  • 当我使用它时出现错误“TypeError:一元操作数类型错误〜:'float'”。 IT 使用示例数据,但我使用的是大型数据文件。有什么帮助吗?
  • 您的数据框可能包含缺失值。在应用 contains 方法之前删除或仔细检查应该可以解决问题。
  • 是的,有些用户名没有信息。如果我需要保留它们......那么我不能使用包含?
  • 您可以像 df.loc[~(~pd.isnull(df.DN) & df.DN.str.contains("OU=DNA"))] 这样添加一个缺失值检查器。
  • 如何一次取出多个值? df.loc[~(~pd.isnull(df.DN) & df.DN.str.contains("OU=DNA", "CN=Users"))] 出现错误@Psidom
【解决方案2】:

要阅读您提供的文件示例,我使用了:

df = pd.read_csv('sample.csv', sep='     ', encoding='latin1', engine="python")

然后:

df = df.drop(df[df.DN.str.contains("OU=DNA")].index)
df.DN = df.DN.str.replace('(CN=MB[0-9]{5}\s*,)', '')
df

给出了想要的结果:

    User Name   DN
0   MB31212     CN=Users,DC=prod,DC=trovp,DC=net
1   MB23423     OU=Generic Mailbox,DC=prod,DC=trovp,DC=net
2   MB23424     CN=Users,DC=prod,DC=trovp,DC=net

【讨论】:

  • 这使用示例文件..但我使用的是大型数据文件..发生错误:'ValueError: cannot index with vector contains NA / NaN values'。有些行是空白的,其中没有任何信息。有什么帮助吗?
猜你喜欢
  • 1970-01-01
  • 2016-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-01
  • 2022-01-04
  • 1970-01-01
  • 2021-03-13
相关资源
最近更新 更多