Pandas/Python函数str.contains返回一个错误



我正在尝试制作一个函数,将我的数据帧输入其中-该函数的目的是将账户过账分类为";接受";或";忽视

我遇到的问题是,在某些帐户上,我只需要查找文本字符串的一部分。如果我在没有函数的情况下这样做,它会起作用,但在函数中我会得到一个错误。

所以这很好:

ekstrakt.query("Account== 'Car_sales'").Tekst.str.contains("Til|Fra", na=False)

但事实并非如此:

def cleansing(df):
if df['Account'] == 'Car_sales':
if df.Tekst.str.contains("Til|Fra", na=False)  : return 'Ignore'
ekstrakt['Ignore'] = ekstrakt.apply(cleansing, axis = 1)

它导致一个错误:";AttributeError:"str"对象没有属性"str’">

我需要";清洁";函数来接受更多的争论,但我很难通过第一部分。

如果使用函数分别处理每一行,则不能使用pandas函数处理像str.contains这样的列。

可能的解决方案是通过&的链式掩码为具有numpy.where:的位AND创建新列

df = pd.DataFrame({'Account':['car','Car_sales','Car_sales','Car_sales'],
'Tekst':['Til','Franz','Text','Tilled']})
m1 = df['Account'] == 'Car_sales'
m2 = df.Tekst.str.contains("Til|Fra", na=False)
df['new'] = np.where(m1 & m2, 'Ignore', 'Accept')
print (df)
Account   Tekst     new
0        car     Til  Accept
1  Car_sales   Franz  Ignore
2  Car_sales    Text  Accept
3  Car_sales  Tilled  Ignore

如果需要在函数中进行处理,可以将in语句与or一起使用,因为使用标量:

def cleansing(x):
if x['Account'] == 'Car_sales':
if pd.notna(x.Tekst):
if ('Til' in x.Tekst) or ('Fra' in x.Tekst):
return 'Ignore'

df['Ignore'] = df.apply(cleansing, axis = 1)
print (df)
Account   Tekst     new  Ignore
0        car     Til  Accept    None
1  Car_sales   Franz  Ignore  Ignore
2  Car_sales    Text  Accept    None
3  Car_sales  Tilled  Ignore  Ignore

相关内容

最新更新