Python - Pandas:从列中提取短语到新列

-1 投票
1 回答
31 浏览
提问于 2025-04-12 18:04

我想从一个 pandas 数据框的某一列中提取两个值,然后放到新的列里。我试过用 iloc 和 extract,但总是搞不明白。有没有人能帮我一下。

我有一列叫做 symbol,里面有以下值:

BANKNIFTY25JAN2436500CE

BANKNIFTY25JAN2436500PE

示例输出:

strike type

36500 CE

36500 PE

我用这行代码:df['type'] = df['symbol'].str.extract('([A-Z]\sE)'),可以成功提取出 CE 和 PE 的值。但我还是无法从字符串中提取出最后的 5 个数字。

1 个回答

2

如果你想从“symbol”这一列中提取最后5个数字和“CE”或“PE”这部分,并把它们放到新的列里,可以使用 str.extract() 方法,配合合适的正则表达式。

根据你的例子,你需要从“symbol”这一列的每一项中提取两个部分:

  1. 在“CE”或“PE”之前的最后5个数字,这些数字似乎代表了行权价。
  2. 表示类型的“CE”或“PE”部分。

我们将使用以下正则表达式:

  • (\d{5}) 用来匹配正好5个数字。这部分会捕获行权价。
  • (CE|PE) 用来匹配并捕获“CE”或“PE”。这部分会捕获类型。

你可以这样在 str.extract() 中使用这些模式:

import pandas as pd

# Assuming df is your DataFrame and 'symbol' is the column with the values like 'BANKNIFTY25JAN2436500CE'

# Extracting strike and type using regular expressions
df[['strike', 'type']] = df['symbol'].str.extract('(\d{5})(CE|PE)')

# This will create two new columns in df, 'strike' with the last 5 digits, and 'type' with 'CE' or 'PE'.

这段代码会在你的数据框中添加两个新列:一个是行权价('strike'),另一个是类型('type'),这些都是根据你的要求从“symbol”这一列提取的。

撰写回答