Pandas DataFrame - 在两个字符串之间提取字符串并包含第一个分隔符

Posted

技术标签:

【中文标题】Pandas DataFrame - 在两个字符串之间提取字符串并包含第一个分隔符【英文标题】:Pandas DataFrame - Extract string between two strings and include the first delimiter 【发布时间】:2020-05-20 15:42:39 【问题描述】:

我在数据框的列中有以下字符串:

"LOCATION: FILE-ABC.txt"
"DRAFT-1-FILENAME-ADBCD.txt"

我想提取单词 FILE 和“.”之间的所有内容。但我想包括第一个分隔符。基本上我试图返回以下结果:

"FILE-ABC"
"FILENAME-ABCD"

为此,我使用以下脚本:

df['field'] = df.string_value.str.extract('FILE/(.w+)')

但我无法返回所需的信息(总是得到 NA)。

我该怎么做?

【问题讨论】:

您确定所有字段都将以.txt 结尾吗? 嗨@Celius,是的所有值都以.txt结尾 那个数据格式有点奇怪,DataFrame真的是这个的正确选择吗? 如果你只有上面的两个字符串,你可以这样做,但我假设你正在寻找更通用的东西:“LOCATION: FILE-ABC.txt”.strip( "位置").strip(".txt") 第二个字符串不行 【参考方案1】:

您可以在正则表达式中完成这一切,而无需使用字符串切片。

df['field'] = df.string_value.str.extract('(FILE.*(?=.txt))')
FILE 是我们开始匹配的文件 .* 抓取任意数量的字符 (?=) 是一个先行断言,匹配没有 消费。

方便的正则表达式工具https://pythex.org/

【讨论】:

感谢pythex.org的介绍【参考方案2】:

如果字符串总是以.txt 结尾,那么您可以尝试以下方法:

df['field'] = df['string_value'].str.extract('(FILE.*)')[0].str[:-4]

例子:

import pandas as pd
text = ["LOCATION: FILE-ABC.txt","DRAFT-1-FILENAME-ADBCD.txt"]
data = 'index':[0,1],'string_value':text
df = pd.DataFrame(data)
df['field'] = df['string_value'].str.extract('(FILE.*)')[0].str[:-4]

输出:

   index                string_value           field
0      0      LOCATION: FILE-ABC.txt        FILE-ABC
1      1  DRAFT-1-FILENAME-ADBCD.txt  FILENAME-ADBCD

【讨论】:

感谢您的编辑 ALollz 我删除了我的答案,直到我解决了这个问题:P【参考方案3】:

您可以创建一个捕获组,从(包括)'FILE' 贪婪地捕获到最后一个周期。或者你可以让它不贪婪,让它在 FILE 之后的第一个 . 处停止。

import pandas as pd
df = pd.DataFrame('string_value': ["LOCATION: FILE-ABC.txt", "DRAFT-1-FILENAME-ADBCD.txt",
                                    "BADFILENAME.foo.txt"])

df['field_greedy'] = df['string_value'].str.extract('(FILE.*)\.')
df['field_not_greedy'] = df['string_value'].str.extract('(FILE.*?)\.')

print(df)
                 string_value    field_greedy field_not_greedy
0      LOCATION: FILE-ABC.txt        FILE-ABC         FILE-ABC
1  DRAFT-1-FILENAME-ADBCD.txt  FILENAME-ADBCD   FILENAME-ADBCD
2         BADFILENAME.foo.txt    FILENAME.foo         FILENAME

【讨论】:

以上是关于Pandas DataFrame - 在两个字符串之间提取字符串并包含第一个分隔符的主要内容,如果未能解决你的问题,请参考以下文章

Pandas DataFrame - 在两个字符串之间提取字符串并包含第一个分隔符

Pandas Dataframe 将具有两个值的分类列重新映射为二进制

在Pandas DataFrame中返回包含字符串的第一个单元格 - 最有效的方法?

如何使用 pandas DataFrame 计算列表的字典?

将具有相同列/索引的两个 pandas DataFrame 合并为一个 DataFrame

pandas中两个dataframe怎么比较