2024-09-30 14:28:32 发布
网友
我有一个Python数据框“dt”,其中一个dt列“betName”中填充了一些对象,这些对象的名称后面有时有+/-数字。我试图找出如何将“betName”分为两列“betName”&;“line”,其中“betName”只是名称,“line”具有+/-数字或常规数字
请看截图,谢谢您的帮助
example of problem and desired result
dt["betName"]
编辑:在执行正则表达式之前添加拆分。这仅将正则表达式应用于最后一个空格之后的单元格信息
我认为需要用正则表达式提取下注信息
df["line"] = df["betName"].apply(lambda x: x.split()[-1]).str.extract('([0-9.+-]+)')
下面是正则表达式的工作原理-the()设置捕获组,即指定要提取的信息
方括号内的内容是一个字符类,因此这里它匹配0-9、+或-符号和句号之间的任何数字
方括号后的加号表示匹配字符类中任何内容的一个或多个重复
请尝试以下(更新的)代码:
df2=df['betName'].str.split(r' (?=[+-]\d{1,}\.?\d{,}?)', expand=True).astype('str')
解释。您可以使用str.split通过正则表达式将行中的文本拆分为两列或更多列:
str.split
(?=[+-]\d{1,}\.?\d{,}?)
' '-第一个是空格字符
' '
()-表示组的开始和结束
()
?=-前瞻性断言。匹配如果。。。匹配下一个,但不使用任何字符串
?=
[+-]-一组字符。它将匹配+或-
[+-]
\d{1,}-\d是一个从0到9的数字,数字数为{start, end}。这里是指从1到任意数字:12004000等
\d{1,}
\d
{start, end}
\.?-\.表示点和?-前面表达式组或符号的0或1个重复
\.?
\.
?
str.split(pattern=None,n=-1,expand=False)
pattern-要拆分的字符串或正则表达式。如果未指定,则按空格分割
pattern
n-输出中的拆分数。无、0和-1将被解释为返回所有拆分
n
expand-将拆分的字符串展开为单独的列
expand
True
False
通过.astype('str')函数,您可以将数据帧转换为字符串类型
.astype('str')
输出。
编辑:在执行正则表达式之前添加拆分。这仅将正则表达式应用于最后一个空格之后的单元格信息
我认为需要用正则表达式提取下注信息
下面是正则表达式的工作原理-the()设置捕获组,即指定要提取的信息
方括号内的内容是一个字符类,因此这里它匹配0-9、+或-符号和句号之间的任何数字
方括号后的加号表示匹配字符类中任何内容的一个或多个重复
请尝试以下(更新的)代码:
解释。您可以使用
str.split
通过正则表达式将行中的文本拆分为两列或更多列:' '
-第一个是空格字符()
-表示组的开始和结束?=
-前瞻性断言。匹配如果。。。匹配下一个,但不使用任何字符串[+-]
-一组字符。它将匹配+或-\d{1,}
-\d
是一个从0到9的数字,数字数为{start, end}
。这里是指从1到任意数字:12004000等\.?
-\.
表示点和?
-前面表达式组或符号的0或1个重复str.split(pattern=None,n=-1,expand=False)
pattern
-要拆分的字符串或正则表达式。如果未指定,则按空格分割n
-输出中的拆分数。无、0和-1将被解释为返回所有拆分expand
-将拆分的字符串展开为单独的列True
用于将拆分的组放置到不同的列中False
用于一行中字符串的系列/索引列表李>通过
.astype('str')
函数,您可以将数据帧转换为字符串类型输出。
相关问题 更多 >
编程相关推荐