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 在他的回答中建议的那样得到明确的改进。
我有一个包含以下行的数据框 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 在他的回答中建议的那样得到明确的改进。