#python #pandas #string
#python #pandas #строка
Вопрос:
Я пытаюсь заменить
'AMAT_0000006951_10Q_20200726_Filing Section: Risk'
с:
'AMAT 10Q Filing Section: Risk'
Тем не менее, все вплоть до раздела подачи: Риск будет постоянно меняться, за исключением позиционирования. Я просто хочу переместить символы из позиции 0 в 5 и с 15 по 19.
df['section'] = df['section'].str.replace(
Я хотел бы управлять этим, но не уверен, как?
Любая помощь очень ценится!
Ответ №1:
Учитывая вашу серию как s
s.str.slice(0, 5) s.str.slice(15, 19) # if substring-ing
s.str.replace(r'd{5}', '') # for a 5-length digit string
Возможно, вам потребуется настроить свои числа для правильного индексирования. Если это не сработает, вы, вероятно, захотите использовать регулярное выражение, чтобы избавиться от некоторой длины чисел (как указано выше, в примере 5).
Или в одной строке для получения конечного результата, который у вас есть выше:
s.str.replace(r'd{10}_|d{8}_', '').str.replace('_', ' ')
Хотя, возможно, было бы неразумно заменять символы подчеркивания. Вместо этого, если они изменяются, разбейте данные на различные столбцы, с которыми можно работать отдельно.
Комментарии:
1. Я даже не думал о том, чтобы установить _ в новые столбцы, мне также интересно, поможет ли это с TF-IDF, если я анализирую информацию, найденную в обоих документах 10-K, 8-K, 10-Q ?
Ответ №2:
Если вы хотите заменить фиксированную длину / положение символов, используйте str.slice_replace
для замены
df['section'] = df['section'].str.slice_replace(6, 14, ' ')
Ответ №3:
Другие люди, вероятно, использовали бы регулярное выражение для замены частей в вашей строке. Однако я бы:
- Разделите строку
- добавьте фрагмент, если это не число
- Присоедините оставшиеся данные
Вот так:
s = 'AMAT_0000006951_10Q_20200726_Filing Section: Risk'
n = []
for i in s.split('_'):
try:
i = int(i)
except ValueError:
n.append(i)
print(' '.join(n))
AMAT 10Q Filing Section: Risk
Редактировать:
Перечитывая ваш вопрос, если вы просто ищете подстроку:
Захват первых 5 символов:
s = 'AMAT_0000006951_10Q_20200726_Filing Section: Risk'
print(s[:4]) # print index 0 to 4 == first 5
print(s[15:19]) # print index 15 to 19
print(s[15:]) # print index 15 to the end.
Если вы хотите просто заменить части:
print(s.replace('_', ' '))
вы также могли бы поместить это в одну строку:
print((s[:4] s[15:19] s[28:]).replace('_', ' '))
'AMAT 10Q Filing Section: Risk'
Комментарии:
1. Эй, я должен был быть немного более ясен в своем сообщении, но объект, который я хочу изменить, встроен в DF как раздел, поэтому я не смогу установить его в переменную, все сказано и сделано, я думаю, что в разделе «раздел» будет более 100 000 таких строк, поэтому надеялся на возможность заменить определенные фрагменты строки просто пробелом ‘ ‘
2. Эти функции не применяются к
pd.Series
, они применяются кstr
. При примерно 100 000 наблюдениях было бы быстрее векторизовать операции, а не выполнять цикл сapply
.