Добрый день и спасибо, что заглянули.Я очень ценю ваше время.
Я пытаюсь перебрать все строки в фрейме данных Pandas, проверить в одном столбце (который содержит строковые данные), есть ли в нем подстрока / ключевое слово, которое соответствует одному изсписок ключевых слов.
Существует 7 списков ключевых слов
Должен быть создан новый столбец с именем списка, если ключевое слово появляется в строке, значение в этом столбце равночтобы быть установленным в 1, если нет, он должен быть установлен в 0.
Я использую последнюю версию ноутбука Jupyter (Anaconda) с Python 3.7.У меня ноутбук Intel Core i5-8250 с оперативной памятью 8 ГБ.Я запускаю код на своем ноутбуке.
У меня есть рабочий код, предоставленный моим другом, но я не понимаю, почему мой оригинальный код не работает (работает, но цикл занимает 1 час 30 минутчерез список)
Dataframe составляет около 250 тыс. строк.Каждый список ключевых слов содержит от 30 до 100 ключевых слов.
Это сработало
def new_data(df, keywords):
cols = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
for col in cols:
start = time.time()
print('Start processing column', col)
list_ = []
for idx, row in df.iterrows():
text = row['Text Data']
try:
if any(word in text for word in get_words(keywords[col])):
list_.append(1)
else:
list_.append(0)
except Exception as e:
list_.append(0)
df = pd.concat([df, pd.DataFrame(list_, columns=[col])], axis=1)
end = time.time()
duration = end-start
print('Column', col, 'Done!')
print('Time used: {:.0f}min {:.0f}sec'.format(duration//60, duration%60))
print('='*40)
return df
new_data = new_data(df, keywords)
display(new_data.head())
Хотя это не (ну, это было частично)
for i in range(len(df.index)): #finds number of rows.
if any(x in str(df.loc[i, 'Text Data']) for x in keywords['a']): #Checks each row if any of keywords match.
df.loc[i,'a'] = 1
else:
df.loc[i,'a'] = 0
В первом фрагменте кода для просмотра списка кадров требовалось около 25 секунд, а затем добавлялись списки, помогающие сформировать новый кадр данных.
Во второмДля завершения первого списка потребовалось 1 час 30 минут, в то время как второй список занял 2 часа, а третий не закончился через 6 часов.
Я хотел бы узнать, почему это так.Даже если есть разница в производительности, сумма, если разница во времени слишком велика.
Я прошу прощения, если на вопрос был дан ответ, или объяснение неясно.Это мой первый вопрос по stackoverflow, и я потратил довольно много времени на то, чтобы найти ответы, которые, как мне показалось, совпали, но не совсем ответил, почему.