从熊猫数据帧的每一行中的单词中删除多个字符组合

I_m_LeMarque

我有一个类似于以下示例数据的大型数据集:

import pandas as pd

raw_data = {'ID': [1,2,3,4,5,6,7,8,9,10], 
        'body': ['FITrnXS$100', '$1000rnReason', 'rnIf', 'bevlauedrnrnnext', 'obccrnrnnoncrnrnactionrn', 'rnrnnotification', 'insdrnrnnon', 'rnrnupdated', 'rnreason', 'rnrnrnLOR']}
df = pd.DataFrame(raw_data, columns = ['ID', 'body'])
df

我想要做的是使用我在下面的代码中定义的单词列表:

remove_string = ['rn', 'rnr', 'rnrn', 'rnrnrn']

然后使用上面的 remove_string 从文本(数据框的“body”列)中的单词中删除这些(如果找到)。

下表将是预期的结果

ID  body            cleaned_txt    Removed_string
1   FITrnXS$100     FIT XS$100     rn
2   $1000rnReason   $1000 Reason      rn
3   rnIf            IF               rn
4   bevlauedrnrnnext    bevalue next    rnrn
5   obccrnrnnoncrnrnactionrn    obcc nonc actionrn  rnrn
6   rnrnnotification    notification    rnrn
7   insdrnrnnon insd non    rnrn
8   rnrnupdated updated rnrn
9   rnreason    reason  rn
10  rnrnrnLOR   LOR rnrnrn

在此处输入图片说明

不幸的是,我试图将数据转换为如下列表:

text = df['body'].tolist()

然后像这样应用函数:

def clnTxt(text):
    txt = [item.replace('rnrn', '\n') for item in text]
    txt = [item.replace('nrn', '\n') for item in txt]
    return txt

text = clnTxt(text)

这不是正确的方法。我应该能够直接在数据帧上应用函数,因此对于每一行,执行清理操作并创建其他列。

只是为我的问题寻找更好的解决方案。

耶斯列

因为较长的字符串包含较短的字符串,所以顺序很重要。因此,通过反向列表循环[::-1]并使用Series.str.extract新列的值,然后Series.str.replace与同一列一起使用

最后DataFrame.dot用于将所有提取的值与分隔符组合到新列:

remove_string = ['rn', 'rnr', 'rnrn', 'rnrnrn']

df['cleaned_txt'] = df['body']
for i in remove_string[::-1]:
    df[i] = df['cleaned_txt'].str.extract('({})'.format(i)) 
    df['cleaned_txt'] = df['cleaned_txt'].str.replace(i, '')

df['Removed_string'] = (df[remove_string].notna()
                                         .dot(pd.Index(remove_string) + ',')
                                         .str.strip(','))
df = df.drop(remove_string, axis=1)
print (df)
   ID                      body     cleaned_txt Removed_string
0   1               FITrnXS$100       FITXS$100             rn
1   2             $1000rnReason     $1000Reason             rn
2   3                      rnIf              If             rn
3   4          bevlauedrnrnnext    bevlauednext           rnrn
4   5  obccrnrnnoncrnrnactionrn  obccnoncaction        rn,rnrn
5   6          rnrnnotification    notification           rnrn
6   7               insdrnrnnon         insdnon           rnrn
7   8               rnrnupdated         updated           rnrn
8   9                  rnreason           eason            rnr
9  10                 rnrnrnLOR             LOR         rnrnrn

如果需要用空格替换:

remove_string = ['rn', 'rnr', 'rnrn', 'rnrnrn']

df['cleaned_txt'] = df['body']
for i in remove_string[::-1]:
    df[i] = df['cleaned_txt'].str.extract('({})'.format(i)) 
    df['cleaned_txt'] = df['cleaned_txt'].str.replace(i, ' ')

df['Removed_string'] = (df[remove_string].notna()
                                         .dot(pd.Index(remove_string) + ',')
                                         .str.strip(','))
df = df.drop(remove_string, axis=1)
print (df)

   ID                      body        cleaned_txt Removed_string
0   1               FITrnXS$100         FIT XS$100             rn
1   2             $1000rnReason       $1000 Reason             rn
2   3                      rnIf                 If             rn
3   4          bevlauedrnrnnext      bevlaued next           rnrn
4   5  obccrnrnnoncrnrnactionrn  obcc nonc action         rn,rnrn
5   6          rnrnnotification       notification           rnrn
6   7               insdrnrnnon           insd non           rnrn
7   8               rnrnupdated            updated           rnrn
8   9                  rnreason              eason            rnr
9  10                 rnrnrnLOR                LOR         rnrnrn

编辑1:

#dictioanry for replace
remove_string = {"rn":" ", "rnr":"\n", "rnrn":"\n", "rnrnrn":"\n"}

#sorting by keys for list of tuples 
rem = sorted(remove_string.items(), key=lambda s: len(s[0]), reverse=True)
print (rem)
[('rnrnrn', '\n'), ('rnrn', '\n'), ('rnr', '\n'), ('rn', ' ')]

df['cleaned_txt'] = df['body']
for i, j in rem:
    df[i] = df['cleaned_txt'].str.extract('({})'.format(i)) 
    df['cleaned_txt'] = df['cleaned_txt'].str.replace(i, j)

cols = list(remove_string.keys())
df['Removed_string'] = (df[cols].notna().dot(pd.Index(cols) + ',')
                                        .str.strip(','))
df = df.drop(remove_string, axis=1)
print (df)
   ID                      body          cleaned_txt Removed_string
0   1               FITrnXS$100           FIT XS$100             rn
1   2             $1000rnReason         $1000 Reason             rn
2   3                      rnIf                   If             rn
3   4          bevlauedrnrnnext       bevlaued\nnext           rnrn
4   5  obccrnrnnoncrnrnactionrn  obcc\nnonc\naction         rn,rnrn
5   6          rnrnnotification       \nnotification           rnrn
6   7               insdrnrnnon            insd\nnon           rnrn
7   8               rnrnupdated            \nupdated           rnrn
8   9                  rnreason              \neason            rnr
9  10                 rnrnrnLOR                \nLOR         rnrnrn

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从多行字符串的每一行中删除前 40 个字符?

来自分类Dev

从emacs缓冲区的每一行中删除最后n个字符

来自分类Dev

在一行VBA中替换多个字符

来自分类Dev

从文本文件的每一行中删除第一个字符

来自分类Dev

如何在Richtextbox中的每一行的开头删除一个字符

来自分类Dev

从文件中读取行,遍历每一行以及该行中的每个字符

来自分类Dev

从shell脚本的每一行中获取前5个字符

来自分类Dev

将每一行的所有列连接为一个字符串,并将其写入R中的另一个数据帧

来自分类Dev

如何从CSV文件的每一行中删除第一列中的第一个字符?

来自分类Dev

测试文件中的每一行是否包含另一个文件中的多个字符串之一

来自分类Dev

Python - 遍历熊猫数据帧中每一行的函数

来自分类Dev

如何根据某个字符串组合是否在同一行的其他列中更改列中的值?(熊猫)

来自分类Dev

如何仅从每一行的第一个单词中删除特定字符?

来自分类Dev

从数据帧中删除以某个字符结尾的行的可重复方法

来自分类Dev

替换熊猫数据框中的多个字符

来自分类Dev

从bash的每一行中删除第一位数字(长度为1-2个字符)

来自分类Dev

如何从字符串中为文件中的每一行选择第n个字符?

来自分类Dev

如何从字符串中为文件中的每一行选择第n个字符?

来自分类Dev

删除每一行的最后一个字符

来自分类Dev

如何编写VB脚本以在所有单元格中查找多个字符串并突出显示每一行?

来自分类Dev

查找数据帧中每一行的出现次数

来自分类Dev

数据帧中每一行的矩阵乘法

来自分类Dev

在R中打印合并数据帧的每一行

来自分类Dev

修改数据帧每一行中的值

来自分类Dev

删除熊猫列中每一行空格后的字符

来自分类Dev

删除熊猫列中每一行空格后的字符

来自分类Dev

用sed替换一行中的多个字符串

来自分类Dev

C:扫描多个字符并在一行中全部输出

来自分类Dev

在一行C中隐藏多个字符串

Related 相关文章

  1. 1

    如何从多行字符串的每一行中删除前 40 个字符?

  2. 2

    从emacs缓冲区的每一行中删除最后n个字符

  3. 3

    在一行VBA中替换多个字符

  4. 4

    从文本文件的每一行中删除第一个字符

  5. 5

    如何在Richtextbox中的每一行的开头删除一个字符

  6. 6

    从文件中读取行,遍历每一行以及该行中的每个字符

  7. 7

    从shell脚本的每一行中获取前5个字符

  8. 8

    将每一行的所有列连接为一个字符串,并将其写入R中的另一个数据帧

  9. 9

    如何从CSV文件的每一行中删除第一列中的第一个字符?

  10. 10

    测试文件中的每一行是否包含另一个文件中的多个字符串之一

  11. 11

    Python - 遍历熊猫数据帧中每一行的函数

  12. 12

    如何根据某个字符串组合是否在同一行的其他列中更改列中的值?(熊猫)

  13. 13

    如何仅从每一行的第一个单词中删除特定字符?

  14. 14

    从数据帧中删除以某个字符结尾的行的可重复方法

  15. 15

    替换熊猫数据框中的多个字符

  16. 16

    从bash的每一行中删除第一位数字(长度为1-2个字符)

  17. 17

    如何从字符串中为文件中的每一行选择第n个字符?

  18. 18

    如何从字符串中为文件中的每一行选择第n个字符?

  19. 19

    删除每一行的最后一个字符

  20. 20

    如何编写VB脚本以在所有单元格中查找多个字符串并突出显示每一行?

  21. 21

    查找数据帧中每一行的出现次数

  22. 22

    数据帧中每一行的矩阵乘法

  23. 23

    在R中打印合并数据帧的每一行

  24. 24

    修改数据帧每一行中的值

  25. 25

    删除熊猫列中每一行空格后的字符

  26. 26

    删除熊猫列中每一行空格后的字符

  27. 27

    用sed替换一行中的多个字符串

  28. 28

    C:扫描多个字符并在一行中全部输出

  29. 29

    在一行C中隐藏多个字符串

热门标签

归档