Python - Pandas:从列中提取短语到新列
我想从一个 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”这一列的每一项中提取两个部分:
- 在“CE”或“PE”之前的最后5个数字,这些数字似乎代表了行权价。
- 表示类型的“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”这一列提取的。