Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pandas DataFrame-提取两个字符串之间的字符串并包含第一个分隔符_Python_String_Pandas_Dataframe_Extract - Fatal编程技术网

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))')