Python Pandas DataFrame-提取两个字符串之间的字符串并包含第一个分隔符
我在数据帧的列中有以下字符串:Python Pandas DataFrame-提取两个字符串之间的字符串并包含第一个分隔符,python,string,pandas,dataframe,extract,Python,String,Pandas,Dataframe,Extract,我在数据帧的列中有以下字符串: "LOCATION: FILE-ABC.txt" "DRAFT-1-FILENAME-ADBCD.txt" 我想提取word文件和“.”之间的所有内容。但是我想包括第一个分隔符。基本上,我试图返回以下结果: "FILE-ABC" "FILENAME-ABCD" 为此,我使用以下脚本: df['field'] = df.string_value.str.extract('FILE/(.w+)') 但我无法返回所需的信息(总是得到NA) 如何执行此操作?如果字符
"LOCATION: FILE-ABC.txt"
"DRAFT-1-FILENAME-ADBCD.txt"
我想提取word文件和“.”之间的所有内容。但是我想包括第一个分隔符。基本上,我试图返回以下结果:
"FILE-ABC"
"FILENAME-ABCD"
为此,我使用以下脚本:
df['field'] = df.string_value.str.extract('FILE/(.w+)')
但我无法返回所需的信息(总是得到NA)
如何执行此操作?如果字符串始终以
.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
您可以创建一个捕获组,从(包括)
“文件”
贪婪地捕获到最后一个时段。或者,您可以使其不贪婪,以便在文件后的第一个
处停止
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.*?)\.')
您可以在正则表达式中完成这一切,而无需使用字符串切片
df['field'] = df.string_value.str.extract('(FILE.*(?=.txt))')
- 文件是我们开始比赛的文件
- *获取任意数量的字符
- (?=)是一个前瞻性断言,它不带 消耗
Handy regex tool你确定所有字段都将以
.txt
结尾吗?嗨@Celius,是的,所有值都以j结尾。txt数据格式有点奇怪,数据帧真的是正确的选择吗?如果你只有上面的两个字符串,你可以这样做,但我假设你正在寻找更广义的东西:“LOCATION:FILE-ABC.txt”.strip(“LOCATION”).strip(“.txt”)不适用于第二个字符串谢谢你的编辑Alolz我删除了我的anwer,直到我解决了这个问题:P
df['field'] = df.string_value.str.extract('(FILE.*(?=.txt))')