Python 使用pandas can'从excel电子表格制作的列表;不能按功能编辑吗?

Python 使用pandas can'从excel电子表格制作的列表;不能按功能编辑吗?,python,pandas,list,function,Python,Pandas,List,Function,因此,我使用Pandas创建了两个字符串列表,其中包含来自两个不同excel电子表格的字母和数字。我要做的是遍历其中一个列表,看看每个项目是否存在于另一个列表中。然而,在一个列表中,字母是大写的,而在另一个列表中,字母是小写的(abc1234与abc1234)。所以我试着做一个函数来接受一个列表,并使列表中的每一项都大写。它应该可以工作,但是当我返回列表并逐项打印出来进行测试时,没有任何变化 你知道为什么这个列表不能编辑吗?我是python新手,所以如果这是一件简单的事情,请原谅我。搜遍了这里,

因此,我使用Pandas创建了两个字符串列表,其中包含来自两个不同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()

只调用
item.upper()
(假设
item
是一个字符串),只会返回大写的item,但不会更改items列表中item的值。请改为执行以下操作:

def make_upper(项目):
对于i,枚举中的项(项):
items[i]=str(item).upper()
退货项目
items=列表('something')
打印('Before:{}'。格式(项目))
打印('After:{}'。格式(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(项目):
return[item.upper()用于items中的项]
否则,请直接使用可用的列表理解功能

available=[item.upper()用于可用中的项]
对于可用的项目:
打印(项目)

完美!奇怪的是,自定义函数不起作用,但列表理解起作用了。谢谢大家!@akantares我尝试了两个自定义函数,它们都对我有用。请你再试一次,让我知道好吗?谢谢。我意识到我只是在调用函数,而不是用函数生成的新列表覆盖旧列表。很抱歉造成混淆,我已经有一段时间没有使用python甚至没有编写代码了。谢谢你的帮助!