gpt4 book ai didi

python - 从所有数据框列中删除子字符串

转载 作者:行者123 更新时间:2023-11-28 20:59:01 29 4
gpt4 key购买 nike

我有一个单词列表(大约 1000 个单词),我称它们为否定词。

['CAST','ARTICLES','SANITARY','JAN','CLAUSES','SPECIAL','ENDORSEMENT']

我很快就会用这个单词列表制作一个数据框。

我还有一个数据框,看起来像 -

    FileName    PageNo     LineNo   GOODS_DESC                   
1 17668620 TM000004 36 CAST ARTICLES IRON SANITARY
59 17668620 TM000014 41 CRATES
60 17668620 TM000014 42 CAST ARTICLES IRON
61 17668620 TM000014 49 JAN ANIMAL AND VEGETABLE
63 17668620 TM000016 49 SETTLING AGENT
65 17668620 TM000016 29 JAN
66 17668620 TM000016 32 CLAUSES SPECIAL CONDITIONS WARRANTIES
67 17668620 TM000016 37 CARGO ISM ENDORSEMENT
69 17668620 TM000017 113 QUANTITY DECLARED IRON CRATES

我想从数据框中删除否定词(尽可能快)。并获得完善的数据框。这样数据框看起来像这样 - 此单词列表中的数据框。

我还有一个数据框,看起来像 -

    FileName    PageNo     LineNo   GOODS_DESC                   
1 17668620 TM000004 36 IRON
59 17668620 TM000014 41 CRATES
60 17668620 TM000014 42 IRON
61 17668620 TM000014 49 ANIMAL AND VEGETABLE
63 17668620 TM000016 49 SETTLING AGENT
65 17668620 TM000016 29 NaN
66 17668620 TM000016 32 CONDITIONS WARRANTIES
67 17668620 TM000016 37 CARGO ISM
69 17668620 TM000017 113 QUANTITY DECLARED IRON CRATES

目前我的方法是迭代数据框,获取每一行并将其拆分并检查拆分的词是否在否定词列表中。如果不存在,那么我将通过加入来创建一个新字符串单词并将其添加到数据框中。

for rows in df.itertuples():
a = []
flat_list = []
a.append(rows.GOODS_DESC)
flat_list = [item.strip() for sublist in a for item in sublist.split(' ') if item.strip()]
flat_list = list(sorted(set(flat_list), key=flat_list.index))
flat_list = [i for i in flat_list if i.lower() not in negative_words_list]

if(not flat_list):
df.drop(rows.Index,inplace=True)
continue
s=' '.join(flat_list)
df.loc[rows.Index,'GOODS_DESC']=s
df['GOODS_DESC'] = df['GOODS_DESC'].str.upper()

这种方法的唯一问题是它太慢了。

如果您有任何提示和逻辑,请分享。谁能告诉我如何使用 pandas dataframe 在更短的时间内完成这个过程。

最佳答案

由于 pandas 中 .str 访问器的缓慢和循环,最好只使用列表理解:

import re
l=['CAST','ARTICLES','SANITARY','JAN','CLAUSES','SPECIAL','ENDORSEMENT']
df['GOODS_DESC'] = [re.sub('|'.join(l),'',i).strip() if re.sub('|'.join(l),'',i).strip() != '' else np.nan for i in df.GOODS_DESC]

输出:

    FileName    PageNo  LineNo                     GOODS_DESC
1 17668620 TM000004 36 IRON
59 17668620 TM000014 41 CRATES
60 17668620 TM000014 42 IRON
61 17668620 TM000014 49 ANIMAL AND VEGETABLE
63 17668620 TM000016 49 SETTLING AGENT
65 17668620 TM000016 29 NaN
66 17668620 TM000016 32 CONDITIONS WARRANTIES
67 17668620 TM000016 37 CARGO ISM
69 17668620 TM000017 113 QUANTITY DECLARED IRON CRATES

时间

%timeit[re.sub('|'.join(l),'',i).strip() if re.sub('|'.join(l),'',i).strip() != '' else np.nan for i in df.GOODS_DESC]

89.6 µs ± 667 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

使用.str 访问器

%timeit df['GOODS_DESC'].str.replace('|'.join(l),'').str.strip()

466 µs ± 10.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

关于python - 从所有数据框列中删除子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50584596/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com