Python:如何删除以某些字符结尾的行?

标签 python python-3.x pandas

我有一个大数据文件,我需要删除以特定字母结尾的行。

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

User Name     DN
MB212DA       CN=MB212DA,CN=Users,DC=prod,DC=trovp,DC=net
MB423DA       CN=MB423DA,OU=Generic Mailbox,DC=prod,DC=trovp,DC=net
MB424PL       CN=MB424PL,CN=Users,DC=prod,DC=trovp,DC=net
MBDA423       CN=MBDA423,OU=DNA,DC=prod,DC=trovp,DC=net
MB2ADA4       CN=MB2ADA4,OU=DNA,DC=prod,DC=trovp,DC=netenter code here

我正在使用的代码:

from pandas import DataFrame, read_csv
import pandas as pd
f = pd.read_csv('test1.csv', sep=',',encoding='latin1') 
df = f.loc[~(~pd.isnull(f['User Name']) & f['UserName'].str.contains("DA|PL",))]

如何使用正则表达式语法删除以“DA”和“PL”结尾的单词,但确保我不会删除其他行,因为它们内部包含“DA”或“PL”?

它应该删除行,我最终得到一个这样的文件:

User Name     DN
MBDA423       CN=MBDA423,OU=DNA,DC=prod,DC=trovp,DC=net
MB2ADA4       CN=MB2ADA4,OU=DNA,DC=prod,DC=trovp,DC=net

前 3 行被删除,因为它们以 DA 和 PL 结尾。

最佳答案

你可以使用这个表达式

df = df[~df['User Name'].str.contains('(?:DA|PL)$')]

它将返回所有不以 DA 或 PL 结尾的行。

?: 是为了让括号不会捕获任何内容。否则,您会看到 pandas 返回以下(无害的)警告:

UserWarning: This pattern has match groups. To actually get the groups, use str.extract.

或者,使用 endswith() 并且不使用正则表达式,可以使用以下表达式实现相同的过滤:

df = df[~df['User Name'].str.endswith(('DA', 'PL'))]

不出所料,没有正则表达式的版本会更快。一个简单的测试,由 big_df 组成,它由你原来的 df 的 10001 个副本组成:

# Create a larger DF to get better timing results
big_df = df.copy()

for i in range(10000):
    big_df = big_df.append(df)

print(big_df.shape)

>> (50005, 2)

# Without regular expressions
%%timeit
big_df[~big_df['User Name'].str.endswith(('DA', 'PL'))]

>> 10 loops, best of 3: 22.3 ms per loop

# With regular expressions
%%timeit
big_df[~big_df['User Name'].str.contains('(?:DA|PL)$')]

>> 10 loops, best of 3: 61.8 ms per loop

关于Python:如何删除以某些字符结尾的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38644696/

相关文章:

扫描 AWS S3 时,Python 线程池比 Go 例程更快?

python - 使用法语时 pytesseract 挂起

python - Python Django 中的 makemessages 无法识别 ugettext 和 ugettext_lazy 函数

python - 检查 csv 文件中的输入

python - 访问 pandas to_csv 中的 zip 压缩选项

python - Pandas 使用日期和另一列合并两列

python - 如何使用django-redis和mockredis在django中模拟redis

python - 在 Jupyter Notebook 中恢复命令历史记录?

python - 使用 Dicts 设置 DataFrame,意外设置

python - 使用 HTTP POST 从服务器打印响应 JSON