我有以下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)
答案 0 :(得分:17)
正则表达式搜索内置于pandas中的Series类中。您可以找到文档here。 在您的情况下,您可以使用
df['ticker'] = df['Company Name'].str.extract("\((.*)\)")
答案 1 :(得分:1)
您可以使用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