У меня есть фрейм данных "trial_df" со значениями столбца ниже, как показано ниже:
Names
GHAITHA & AL MOOSA
ASEEL ELECTRONICS T
SUNRISE SUPERMARKET-QU
EMARAT-AL SAFIYAH(6735
LULU CENTRE LLC EFT TE
MAX
THEMAX
THE LULU
GHAITHA 123
SUNRISE %$#
Требование:
1) Извлечение только строк до и после пробела, специальных символов.
Например, например: "ASEEL ELECTRONICS T" станет "ASEEL ELECTRONICS
2) Но только при следующих условиях:
a) длина второй строки должна быть больше, чем 2
b) вторая строка должна быть буквенно-цифровой
Например: 'GHAITHA & AL MOOSA' будет просто 'GHAITHA', поскольку вторая строка после пробела - '&' (оба условия не выполняются: не алфавитно-цифровая идлина не превышает 2)
Например: «MAX» будет «MAX» как его единственная строка, так же как «LULU» будет таким же, как уже две строки.
Окончательный результат:
Names
GHAITHA
ASEEL ELECTRONICS
SUNRISE SUPERMARKET-QU
EMARAT
LULU CENTRE
MAX
THEMAX
THE LULU
GHAITHA
SUNRISE
Моя функция выполнить требование:
def remove_strings(df, col):
for i in df.index:
x = df.at[i, col]
x = x.split(' ')
if len(x) > 1:
if len(x[1]) > 2:
x[1] = ''.join(e for e in x[1] if e.isalnum())
x = ' '.join(x[0:2])
df.at[i, col] = x
else:
df.at[i, col] = x[0]
else:
df.at[i, col] = df.at[i, col]
#calling my function
remove_strings(df=trial_df, col='Names')
Проблема с моей функцией: хотя она решает требование, но не оптимизирована. Мои данные болеечем 1 миллион строк, так что это циклы, которые много разich очень много времени.Есть ли очень хороший оптимизированный способ решить мое требование?