使用csv文件

时间:2016-06-22 21:00:14

标签: python python-3.x pandas

我有一个大型数据文件,我需要删除具有特定关键字的行。

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

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”?
  3. 我想获得类似下面发布的内容,其中包含'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
    

2 个答案:

答案 0 :(得分:3)

您可以尝试将此两步过滤作为您的逻辑。使用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=并使用[^,]*,捕获模式直到第一个逗号;

答案 1 :(得分:1)

要阅读您使用过的文件样本:

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