Я пишу код, чтобы брать значения из каждого столбца фрейма данных и выполнять некоторую обработку. Я получаю исключение всякий раз, когда есть значение NaN. Я не хочу бросать столбцы с Нэн. Раньше я решал проблему, просто перехватывая исключение, но теперь я не могу сделать то же самое, что и здесь. Может ли кто-нибудь предложить правильный способ сделать это? Раньше я решал это так:
for index, row in df_work.iterrows():
descrip = row['description']
try:
r = Rake()
r.extract_keywords_from_text(descrip)
key_words_dict_scores = r.get_word_degrees()
row['Key_words'] = list(key_words_dict_scores.keys())
except Exception as e:
print(e)
row['Key_words'] = ''
Я хочу сделать то же самое здесь:
df_work['specialties'] = [','.join(x) for x in df_work['specialties'].map(lambda x: x.lower().replace(' ','').split(',')).values]
df_work['industry'] = [','.join(x) for x in df_work['industry'].map(lambda x: x.lower().replace(' ','').split(',')).values]
df_work['type'] = [','.join(x) for x in df_work['type'].map(lambda x: x.lower().replace(' ','').split(',')).values]
Я получаю эту ошибку в приведенном выше коде:
'float' object has no attribute 'lower'
Колонка Specialties содержит такие данные:
df_work.loc['TOTAL', 'specialties']
ВЫВОД >> 'Oil & Gas - Exploration & Production,Upstream,Refining,Trading,Shipping,Marketing,Energy,Crude Oil,Petroleum,Petrochemicals,Liquified Natural Gas,Renewable Energy,Drilling Engineering,Completion & Intervention Engineering,Geology,Geoscientists,IT'
type(df_work.loc['TOTAL', 'specialties'])
ВЫВОД>> str
Ожидаемый результат после запуска моего кода выше должен быть:
ВЫВОД>> 'oil&gas-exploration&production,upstream,refining,trading,shipping,marketing,energy,crudeoil,petroleum,petrochemicals,liquifiednaturalgas,renewableenergy,drillingengineering,completion&interventionengineering,geology,geoscientists,it'
type(df_work.loc['TOTAL', 'specialties'])
ВЫВОД>> str
добавлен. Пожалуйста, проверьте еще раз
Можешь проверить мое решение?
Здесь можно использовать функции pandas, работающие с NaN
s nice:
df_work['specialties'] = df_work['specialties'].str.lower().str.replace(' ','')
Если нужно работать с NaN
s, проверьте его с помощью isinstance()
и if-else
утверждений:
df_work['specialties'] = (df_work['specialties']
.map(lambda x: x.lower().replace(' ','') if isinstance(x, str) else x))
И решение для понимания списка:
df_work['specialties'] = [x.lower().replace(' ','')
if isinstance(x, str)
else x
for x in df_work['specialties']]
Образец:
df_work = pd.DataFrame({'specialties':['First spec, Sec spec','A Vb,ds RT', np.nan]})
print (df_work)
specialties
0 First spec, Sec spec
1 A Vb,ds RT
2 NaN
df_work['specialties'] = [x.lower().replace(' ','')
if isinstance(x, str)
else x
for x in df_work['specialties']]
print (df_work)
specialties
0 firstspec,secspec
1 avb,dsrt
2 NaN
да сейчас работает. Я получил ошибку, но это было что-то еще. Спасибо:)
Можно добавить некоторые образцы данных, 3 строки, например. для столбца
specialties
?