У меня есть dataframe-df со столбцом «Имена», как показано ниже:
Names
AL GHAITHA & AL MOOSA
AL ASEEL ELECTRONICS T
SUNRISE SUPERMARKET-QU
EMARAT-AL SAFIYAH(6735
LULU CENTRE LLC EFT TE
THE MAX
код:
remove_letters = ['AL ', 'THE ']
# my function below :
def remove_start_words(df, col, letters):
for l in letters:
for i in df.index:
x = df.at[i, col]
if x.startswith(l):
df.at[i, col] = x[len(l):]
else:
df.at[i, col] = x
def remove_strings(self, 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]
def remove_end_digits(self, df, col):
for i in df.index:
x = df.at[i, col]
df.at[i, col] = x.rstrip(string.digits)
# calling my function
remove_start_words(df=df, col='Names',
letters=remove_letters)
remove_strings(df=df, col='Names')
remove_end_digits(df=df, col='Names')
Теперь проблема в том, что у меня есть массив данных, содержащий более 1 миллиона значений столбцов.
Мой код не очень хорошо оптимизирован? Как получить оптимизированное решение?
Выпуск 1:
Я могу понять, что использовал 2 цикла (1 для remove_letters и другой для всех значений столбца), что вызывает медлительность.
Есть ли лучший способ? где я могу проверить, начинаются ли значения столбца с букв, упомянутых в списке remove_letters, и убрать их одним выстрелом?
Выпуск 2 и 3:
Какова цель функции - "remove_strings":
Получить только 2 строки из имен столбцов. Например: ASEEL ELECTRONICS T
вывод будет: ASEEL ELECTRONICS
Есть ли более быстрый способ для функций: remove_strings, remove_end_digits
Основная проблема: все ли эти 3 функции могут быть выполнены одновременно одним выстрелом?
Ожидаемый фрейм данных:
Names
GHAITHA
ASEEL ELECTRONICS
SUNRISE SUPERMARKET
EMARAT-AL SAFIYAH
LULU CENTRE
MAX
ПРИМЕЧАНИЕ. Функция «remove_start_words» должна проверять, начинаются ли какие-либо из упомянутых букв в «Имена», если так, удалите их.
Например, «AL THEMAX» должно быть «THEMAX», а не «MAX» (исключая AL и THE)
Заранее спасибо.