Сопоставьте строку в ячейке Excel и запишите определенное значение в новую/смежную ячейку Python

#python #excel

Вопрос:

Я пытаюсь сопоставить строку в ячейке, и если она присутствует, я должен быть в состоянии записать определенную строку в новую ячейку/столбец. Например:

Это мой xlsx файл:

 |UserPrincipalName         |Contact |Age    |Container                           |
|:-------------------------|:------:|:-----:|:--------------------------:|
|John.doe                  |Email   |23     |LocationEMEAFranceUser |
|Jane.doe                  |Phone   |25     |LocationEMEAGermanyUser|
|Jane12                    |Phone   |25     |LocationEMEAItalyUser  |
|Jane1322                  |Phone   |25     |LocationEMEABelgiumUser|
|Feng.Main                 |SMS     |21     |LocationAPACChinaUser  |
|serviceaccount            |Email   |       |LocationService Accounts |
 

Ожидаемый Результат:

 |UserPrincipalName         |Contact |Age    |Container                           |Region         |
|:-------------------------|:------:|:-----:|:-----------------:|:--------------|
|John.doe                  |Email   |23     |LocationEMEAFranceUser |EMEA North     |
|Jane.doe                  |Phone   |25     |LocationEMEABelgiumUser|EMEA South     |
|Jane12                    |Phone   |25     |LocationEMEAGermanyUser|EMEA South     |
|Jane1322                  |Phone   |25     |LocationEMEAItalyUser  |EMEA North     |
|Feng.Main                 |SMS     |21     |LocationAPACChinaUser  |APAC           |
|serviceaccount            |Email   |       |LocationService Accounts |Service Account|
 

Мой Код:

   df = pd.read_excel('C:\Users\Desktop\OpTest.xlsx')
  df['Region'] = df[df['Container'].str.contains(r'\EMEA\')]
  df = df.to_excel('C:\Users\Desktop\MFAOpTest.xlsx')
 

Мой Вывод:
введите описание изображения здесь

Ответ №1:

Я думаю, что самым простым способом было бы —

 df = pd.read_excel('C:\Users\Desktop\OpTest.xlsx')

def myfunc(x):
    if ('EMEAFrance' in x or 'EMEAItaly'in x):
        return "EMEA North"
    elif ('EMEABelgium' in x or 'EMEAGermany' in x):
        return "EMEA South"
    elif 'APACChina' in x:
        return "APAC"
    elif 'Service Accounts' in x:
        return "Service Account"

df['Region'] = df['Container'].apply(myfunc)
print(df)

df.to_excel('C:\Users\Desktop\MFAOpTest.xlsx')
 

Это добавит столбец региона в фрейм данных, как и ожидалось.
Кроме того, вы можете настроить функцию в соответствии с вашими требованиями

Комментарии:

1. @IntelVenus — Если приведенный выше ответ решит вашу проблему, пожалуйста, примите Ответ, чтобы он считался решенным. Если ответ не решает проблему, пожалуйста, укажите проблему

2. Я попробовал это, и он ничего не записал в файл excel (с моей стороны была добавлена команда для записи выходных данных в excel). Я также попытался распечатать вывод, и он не вернул НИЧЕГО в столбце Регион, когда вывод был напечатан. Будет ли эта функция соответствовать всей строке или проверять наличие подстроки?

3. @IntelVenus — Я изменил ответ, пожалуйста, попробуйте еще раз. В коде для экспорта файла в EXCEL была синтаксическая ошибка, поэтому вывод отображался как «Нет». Пожалуйста, проверьте код последней строки в моем ответе выше. Эта функция проверит наличие подстроки (не всей строки)

4. Я уже пытался записать это в файл excel. Не сработало 🙁 Кроме того, он по-прежнему не печатает НИЧЕГО в регионе. Попробовал ваш последний код, он также дает тот же результат.

5. @IntelVenus — Хорошо, я думаю, что в этом вопросе есть некоторое недопонимание. Не могли бы вы, пожалуйста, поделиться точными шагами, которые вы выполняете ? (Так что я могу попробовать то же самое со своей стороны) Пожалуйста, укажите, какую IDE вы используете (ноутбук Ex — Jupyter, PyCharm и т. Д.) Кроме того, пожалуйста, поделитесь образцом файла EXCEL (используя ссылку на веб-сайт или ссылку на Google Диск)