#python #pandas #dataframe
#python #pandas #фрейм данных
Вопрос:
Я хочу выделить определенные слова во фрейме данных. Мои коды приведены ниже, проблема, с которой я сталкиваюсь, заключается в том, что он выделяет только первые слова из «selected_ text», что в данном случае является экономией, и не может выделить другие слова, даже если они присутствуют в тексте. Как мы можем изменить его таким образом, чтобы выделить все слова, если они присутствуют в тексте? Во-вторых, в настоящее время я получаю только одно слово в столбце «существующий». Можем ли мы получить более одного слова, если они присутствуют в столбце «body_text»? и также выделите их.
import pandas as pd
from IPython.display import display, Markdown, Latex, HTML
df =pd.read_csv("/content/df_eup.csv")
df.head(1)
df['body_text'].isnull().sum()
df.dropna(subset=['body_text'], inplace=True)
list_exist = []
selected_words=["economy", "recession", "unemployment", "depression","inflation", "covid19","virus"," bank"]
for index, row in df.iterrows():
word = selected_words[0]
i = 0
while (word not in row['body_text'] and i < 7 ):
i =1
word = selected_words[i]
if i<7:
list_exist.append(selected_words[i])
else:
list_exist.append("not_exist")
df["existing"]=list_exist
def highlight_selected_text(row):
text = row["body_text"]
selected_text = ["economy", "recession", "unemployment", "depression","inflation", "covid19","virus","bank"]
ext = row["existing"]
color = {
"economy": "red",
"recession": "red",
"unemployment": "red",
"depression": "red",
"inflation": "red",
"covid19": "red",
"virus" : "red",
"bank": "red",
"not_exist": "black"
}[ext]
highlighted = f'<span style="color: {color}; font-weight: bold">{ext}</span>'
return text.replace(selected_text[0] or selected_text[1] or selected_text[2] or selected_text[3] or selected_text[4]or selected_text[5]or selected_text[6]or selected_text[7], highlighted)
df["highlighted"] = df.apply(highlight_selected_text, axis=1)
display(HTML(df.sample(30).to_html(escape=False)))
Пример вывода для выбора более слов (для второй части вопроса)
Ответ №1:
Попробуйте получить значение dict внутри строки f:
def highlight_selected_text(row):
text = row["body_text"]
ext = row["existing"]
color = {
"economy": "red",
"recession": "red",
"unemployment": "red",
"depression": "red",
"inflation": "red",
"covid19": "red",
"virus" : "red",
"bank": "red",
"not_exist": "black"
}
for k, v in color.items():
text = text.replace(k, f'<span style="color: {v}; font-weight: bold">{k}</span>')
return text
Комментарии:
1. Спасибо, я обновил, но теперь получаю эту ошибку TypeError: строковые индексы должны быть целыми числами
2. Большое спасибо!! Александра, я обновил, но это не решило проблему выделения
3. О, попробуйте также заменить
return text.replace(selected_text[0] or selected_text[1] or selected_text[2] or selected_text[3] or selected_text[4]or selected_text[5]or selected_text[6]or selected_text[7], highlighted)
наreturn text.replace(ext, highlighted)
4. Большое вам спасибо!! Это сработало. Первая проблема выделения решена. Не могли бы вы помочь мне со вторым? Я хочу выделить больше слов в столбце «существующий», если они присутствуют в тексте. В настоящее время я получаю только одно слово.
5. Не могли бы вы привести пример результата, которого вы хотите достичь?