需要帮助拆分我的 DataFrame 中的列 (Python)

Need help splitting a column in my DataFrame (Python)

我有一个 Python DataFrame“dt”,其中一个 dt 列“betName”充满了有时在名称后有 +/- 数字的对象。我想弄清楚如何将“betName”分成两列“betName”和“line”,其中“betName”只是名称,“line”有 +/- 数字或常规数字

请看截图,谢谢帮助!

example of problem and desired result

dt["betName"]

编辑:在执行正则表达式之前添加了一个拆分。这仅将正则表达式应用于最后一个白色 space.

之后的单元格信息

我认为你需要用正则表达式提取投注信息。

df["line"] = df["betName"].apply(lambda x: x.split()[-1]).str.extract('([0-9.+-]+)')

正则表达式的工作原理如下 - () 设置捕获组,即指定要提取的信息。

方括号内的内容是一个字符class,所以这里它匹配0-9中的任意数字,+或-符号和句号。

方括号后的加号表示匹配字符class.

中任何内容的一次或多次重复

试试这个(已更新)代码:

df2=df['betName'].str.split(r' (?=[+-]\d{1,}\.?\d{,}?)', expand=True).astype('str')

说明。您可以使用str.split通过正则表达式将行中的文本拆分为2个或更多列:

  (?=[+-]\d{1,}\.?\d{,}?)

' ' - Space 第一个字符。

() - 表示组的开始和结束。

?= - 前瞻断言。匹配 if ... 匹配下一个,但不消耗任何字符串。

[+-] - 一组字符。它将匹配 + 或 -.

\d{1,} - \d 是从 0 到 9 的数字,位数为 {start, end}。这里表示从 1 到任意数字:1,200,4000 等等

\.? - \. 表示一个点,? - 前面的表达式组或符号重复 0 次或 1 次。

str.split(pattern=None, n=- 1, expand=False)

pattern - 要拆分的字符串或正则表达式。如果未指定,按空格拆分

n - 输出中的分割数。 None,0 和 -1 将被解释为 return 所有拆分。

expand - 将拆分的字符串扩展到单独的列中。

  • True 用于将拆分组放入不同的列中
  • False 连续 Series/Index 个字符串列表。

通过.astype('str')函数将数据帧转换为字符串类型。

输出。