#python #pandas #jupyter-notebook
#python #pandas #jupyter-записная книжка
Вопрос:
У меня есть таблица — некоторые со скобками (), а некоторые без
Companies
Arbino (Arb) Corp Ltd
Arbino (Arb) Corp Ltd; Bakroaho (Bak) Bank
Zinga
Zinga; Bakroaho (Bak) Bank
Bubble Zip (Bzip) Corp
Bubble Zip (Bzip) Corp; Bakroaho (Bak) Bank
Мне нужно создать столбец, подобный этому, то есть текст в круглых скобках И текст после круглых скобок.
Companies Companies_Compressed
Arbino (Arb) Corp Arb Corp Ltd
Arbino (Arb) Corp; Bakroaho (Bak) Bank Arb Corp Ltd; Bak Bank
Zinga Zinga
Zinga; Bakroaho (Bak) Bank Zinga; Bak Bank
Bubble Zip (Bzip) Corp Bzip Corp
Bubble Zip (Bzip) Corp; Bakroaho (Bak) Bank Bzip Corp; Bak Bank
Мне также нужно создать отдельную таблицу, чтобы сообщить всем, что Arbino = Arb
Company_prefix short_form
Arbino Arb
Bakroaho Bak
Bubble Zip Bzip
каково решение?
Ответ №1:
Пожалуйста, замените любые alphanumerics
(
or
специальные символы перед специальным символом ()
на ''
использование str.replace
df['Companies_Compressed']=df['Companies'].str.replace('((w s){1,2}(?=[(])|[()])','')
По второму вопросу;
df1=df.assign(Company_prefix=df['Companies'].str.extract('(w sw |w )(?=s[(])'),short_form =df['Companies'].str.extract('(?<=[(])(.*?)(?=[)])')).dropna()
print(df1)
Комментарии:
1. Большое спасибо. Первый вопрос, Companies_Compressed, отображается следующим образом: Arbino Arb Corp . Второй вопрос в порядке.
2. Первый вопрос, который работает для меня. Это странно! Попробуйте использовать
df['Companies_Compressed']=df['Companies'].str.replace('(w s(?=[(])|[()])','')
вместо этого.3. Это отлично работает. Спасибо. Это не работает, если перед () есть два слова. Например, корпорация Bubble Zip (BZIP) отображается как корпорация Bubble Zip BZIP.
4. Вы правы, это не сработает для `Bubble Zip (BZIP)`. Это было включено в вопрос, хотя
5. Пожалуйста, попробуйте
df['Companies_Compressed']=df['Companies'].str.replace('((w s){1,2}(?=[(])|[()])','')
ответить на первый вопрос
Ответ №2:
Давайте попробуем это регулярное выражение:
pattern = '((w )) (w )'
df['Companies_Compressed'] = (df.Companies.str.extractall(pattern)
.agg(' '.join, axis=1)
.groupby(level=0).apply('; '.join)
.fillna(df['Companies'])
)
Companies Companies_Compressed
0 Arbino (Arb) Corp Arb Corp
1 Arbino (Arb) Corp; Bakroaho (Bak) Bank Arb Corp; Bak Bank
2 Zinga NaN
Комментарии:
1. работает хорошо. Есть ли способ преобразовать, например, для Zinga; Банк Bakroaho (Bak) в Zinga; Банк Bak. Текущий код удаляет zinga. Я отредактировал вопрос.