python - 提取 pandas df 列中两个子字符串之间的字符串

标签 python pandas string

我有以下数据框:

                                           contract
0  Future(conId=482048803, symbol='ESTX50', lastT...
1  Future(conId=497000453, symbol='XT', lastTrade...
2  Stock(conId=321100413, symbol='SXRS', exchange...
3  Stock(conId=473087271, symbol='ETHEEUR', excha...
4  Stock(conId=80268543, symbol='IJPA', exchange=...
5  Stock(conId=153454120, symbol='EMIM', exchange...
6  Stock(conId=75776072, symbol='SXR8', exchange=...
7  Stock(conId=257200855, symbol='EGLN', exchange...
8  Stock(conId=464974581, symbol='VBTC', exchange...
9  Future(conId=478135706, symbol='ZN', lastTrade...

我想创建一个包含所有符号(ESTX50、XT、SXRS...)的新“符号”列。

为了提取“symbol='”和下面的单引号之间的子字符串,我尝试了以下操作:

df['symbol'] = df.contract.str.extract(r"symbol='(.*?)'")

但我得到一列 NaN。 我究竟做错了什么?谢谢

最佳答案

看起来那是一列对象,而不是字符串:

import pandas as pd


class Future:
    def __init__(self, symbol):
        self.symbol = symbol

    def __repr__(self):
        return f'Future(symbol=\'{self.symbol}\')'


df = pd.DataFrame({'contract': [Future(symbol='ESTX50'), Future(symbol='XT')]})

df['symbol'] = df.contract.str.extract(r"symbol='(.*?)'")
print(df)

df:

                  contract symbol
0  Future(symbol='ESTX50')    NaN
1      Future(symbol='XT')    NaN

注意 pandas 将字符串视为 object 类型,因此仍然允许字符串访问器尝试执行操作。但是,它无法提取,因为这些不是字符串。

我们可以先使用 astype 转换为字符串:

df['symbol'] = df.contract.astype(str).str.extract(r"symbol='(.*?)'")

df:

                  contract  symbol
0  Future(symbol='ESTX50')  ESTX50
1      Future(symbol='XT')      XT

但是,更快的方法是尝试提取对象属性:

df['symbol'] = [getattr(x, 'symbol', None) for x in df.contract]

或用apply (这可能比理解慢)

df['symbol'] = df.contract.apply(lambda x: getattr(x, 'symbol', None))

两者都产生:

                  contract  symbol
0  Future(symbol='ESTX50')  ESTX50
1      Future(symbol='XT')      XT

关于python - 提取 pandas df 列中两个子字符串之间的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69780576/

相关文章:

python - 导入模块,AttributeError

python - pandas 中的数据透视会产生索引问题

python - Groupby 客户和商店 - 获得平均交易频率。日期问题

swift - 无法在强制转换中将类型 'Character' 的值转换为类型 'String'

python - 如何在 ssl python 套接字中设置密码

python - 如何从 python 脚本在 s3 存储桶上创建文件夹?

python - 如何避免在 pandas 数据帧上插入重复的行?

python - 将一个数据帧中的手机号码与另一数据帧中的手机号码进行比较

string - Shell 脚本三元运算符获取字符串结果

javascript - 如何使用 DOM 将数字添加到字符串