【问题标题】:Extract substring from string in dataframe从数据框中的字符串中提取子字符串
【发布时间】:2015-05-31 09:18:15
【问题描述】:

我有以下 ddataframe:

                             Company Name        Time Expectation
0                Asta Funding Inc. (ASFI)  9:35 AM ET           -
1                       BlackBerry (BBRY)  7:00 AM ET     ($0.03)
2                    Carnival Corp. (CCL)  9:15 AM ET       $0.09
3                      Carnival PLC (CUK)  0:00 AM ET           -

我希望将公司符号放在自己的单独列中,而不是在公司名称列中。现在我只是让它遍历公司名称,然后 RE 提取符号,将其放入列表中,然后将其应用于新列,但我想知道是否有更清洁/更简单的方法。

我是整个地图减少 lambda 的新手。

for company in df['Company Name']:
    ticker = re.search("\(.*\)",company).group(0)
    ticker = ticker[1:len(ticker)-1]
    tickers.append(ticker)

【问题讨论】:

    标签: python pandas split


    【解决方案1】:

    正则表达式搜索内置于 Pandas 的 Series 类中。您可以找到文档here。 在您的情况下,您可以使用

    df['ticker'] = df['Company Name'].str.extract("\((.*)\)") 
    

    【讨论】:

    • 我无法让它继续工作。我正在使用 r"..." 但它仍然在说 ValueError: This pattern contains no groups to capture。
    • @mobone 将正则表达式更改为"\((.*)\)",注意在.* 周围添加的括号以使该匹配部分成为一个组
    【解决方案2】:

    您可以使用str 对整个系列进行元素操作这一事实。我假设公司的符号将始终位于公司名称的末尾并用括号括起来:

    df['Company Symbol'] = df['Company Name'].str.rstrip(')').str.split('(').str[1] # Make new column
    df['Company Name'] = df['Company Name'].str.replace(r'\(.*?\)$', '') # Remove symbol from company name
    

    【讨论】:

      猜你喜欢
      • 2011-07-21
      • 1970-01-01
      • 1970-01-01
      • 2020-04-18
      • 1970-01-01
      • 2018-09-29
      • 2021-12-23
      • 1970-01-01
      相关资源
      最近更新 更多