Pandas 正则表达式提取创建多列

Pandas regex extract creates multiple column

我有一个包含以下行的数据框 df1

df1['col1']

asd1 12KVsdf
pqr 11.2 KVsdf

我正在尝试以下操作:

df1['col1'].extract(r'(\d*\.\d+\sKV)|(\d+\sKV)')

这给出:

df1['col1']

  0   1
12KV  NaN
NaN   11.2 KV

我正在尝试提取 KV 之前的所有数字。

我想要的输出是:

df1['col1']

  0   
12KV
11.2 KV

您可以使用

df1['col2'] = df1['col1'].str.extract(r'(\d*\.?\d+\s?KV)')

regex demo。请注意,\s 是可选的,并且数字匹配模式已更改为同时匹配整数和浮点值。

详情

  • \d* - 零个或多个数字
  • \.? - 一个可选的 .
  • \d+ - 一位或多位数字
  • \s? - 一个可选的空格
  • KV - KV 文字。

您有 2 个捕获组(括号之间的内容),这就是您获得 2 列的原因。

您可以将它们全部放在一个捕获组中,这样您将只会得到 1 列:

df1['col1'].extract(r'(\d*\.\d+\sKV|\d+\sKV)')

无论如何,正则表达式都可以像 Wiktor Stribiżew 在他的回答中建议的那样得到明确的改进。