如何根据正则删除PD系列或数据框架的行



实际上应该很简单。我有一个PD系列栏['barcode'],我想从中获取过滤器EAN(带12、13或14位数字的条形码(。使用Regex我将循环中的新列表附加到一个新列表中。我如何同时删除原始系列的行?

bar = pd.read_csv("barcode.csv", header=0, sep=';', engine='python')
ean = []
for i in bar['Barcode']:
    x = re.search("d{12,14}", i)
    if(x):
        ean.append(x.group())
        #bar.drop(bar['Barcode']==x.string, inplace=True)
print(ean)

问题伴随着我评论的行。这不是正确的方法,但我不知道还有什么可能。你能帮我删除行吗?

预先感谢!

我只是将所有内容都累积到列表中,然后掉落,然后在您迭代时突变对象,这是在要求麻烦!

首先,将其变成MWE:

import re
import pandas as pd
df = pd.DataFrame(
    [(i, '1' * i) for i in range(10, 17)],
    columns=['i', 'barcode']
)

为我们提供了一个带有两个列的简单数据框到列:

def match(s):
    m = re.match(r'^d{12,14}$', s)
    if m:
        return m.group()
df['match'] = df['barcode'].apply(match)

注意,我在字符串开始时使用r来关闭逃逸,并使用^$匹配字符串的开始和结尾。

您可以使用它来过滤数据框:

df[~df['match'].isnull()]

这给我们带来了三行的匹配。

如果您想要一个单线,并且不在乎匹配的字符串,则可以这样做:

df[df['barcode'].apply(lambda s: re.match(r'^d{12,14}$', s) is not None)]

但我会说这样的代码在不可读的

上接壤

最新更新