Список, составленный из таблицы Excel с использованием панд, не может быть отредактирован функциями? - PullRequest
0 голосов
/ 01 ноября 2019

, поэтому я использовал Pandas для создания 2 списков строк, содержащих буквы и цифры из 2 разных таблиц Excel. То, что я пытаюсь сделать, это перебрать один из списков и посмотреть, существует ли каждый элемент в другом списке. Однако в одном списке буквы являются заглавными, а в другом - строчными (abc1234 против ABC1234). Поэтому я попытался создать функцию, чтобы взять список и сделать каждый элемент в этом списке заглавными. Это должно работать, но когда я возвращаю список и распечатываю его по пунктам для проверки, ничего не изменилось.

Есть идеи, почему этот список нельзя редактировать? Я новичок в Python, так что прости меня, если это простая вещь. Обыскал все здесь и ничего не могу найти.

import pandas as pd
from pandas import ExcelWriter
from pandas import ExcelFile

# functions

def make_upper(items):
    for item in items:
        item.upper()
    return items

def main():

    df = pd.read_excel(file.xlsx', sheet_name = 'sheet3')
    df2 = pd.read_excel('Assoc Info.xlsx', sheet_name = 'sheet1')

available = []
skill_group = []

for i in df2.index:
    if df2['CURRENTSTATUS'].iloc[i] == "On Assignment":
        available.append(df2['login_id'].iloc[i])


for i in df.index:
    if df['skill_name'].iloc[i] == "Skill1" \
    or df['skill_name'].iloc[i] == "Skill2" \
    or df['skill_name'].iloc[i] == "Skill3":
        if df['login_id'].iloc[i] not in skill_group:
            skill_group.append(df['login_id'].iloc[i])

make_upper(available)

for item in available:
    print(item)


main()

1 Ответ

1 голос
/ 01 ноября 2019

Вызов только item.upper() (при условии, что item - строка), только вернет элемент в верхнем регистре, но не изменит значение элемента в списке элементов. Вместо этого выполните следующие действия:

def make_upper(items):
    for i, item in enumerate(items):
        items[i] = str(item).upper()
    return items

items = list('something')
print('Before: {}'.format(items))
print('After: {}'.format(make_upper(items)))

Вывод :

Before: ['s', 'o', 'm', 'e', 't', 'h', 'i', 'n', 'g']
After: ['S', 'O', 'M', 'E', 'T', 'H', 'I', 'N', 'G']

Даже лучше: Использовать понимание списка

ЕслиВы вообще хотите использовать пользовательскую функцию:

def make_upper(items):
    return [item.upper() for item in items]

В противном случае используйте понимание списка непосредственно на available.

available = [item.upper() for item in available]

for item in available:
    print(item)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...