是否可以将列名作为参数传递给方法,如果是这样,我该怎么做?

Is it possible to pass a column name as a parameter to a method and if so, how can I do that?

提问人:user20880339 提问时间:1/3/2023 最后编辑:aynberuser20880339 更新时间:3/23/2023 访问量:146

问:

我想替换不同列中的值。也就是说,如果它们包含“Y”,则值为“Y”,如果它们包含“N”,则值为“N”。

由于我对许多列执行此操作,因此代码看起来非常冗余,我想知道是否可以将始终相似的过程(仅列名称更改)外包给方法。

不幸的是,我不知道如何将列名作为参数传递给我当时编写的方法。这可能吗?我是 Python 初学者,以前从未见过这个!

非常感谢您的帮助!

df = pd.DataFrame({'A': ['J', 'Ja', 'N', 'N  n'],
                   'B': ['Nö', 'Ja', 'N', 'N  n'],
                   'C': ['Jup', 'Ja', 'N', 'N  n']})

df.loc[df['A'].str.contains('J'), 'A'] = 'J'
df.loc[df['A'].str.contains('N'), 'A'] = 'N'

df.loc[df['B'].str.contains('J'), 'B'] = 'J'
df.loc[df['B'].str.contains('N'), 'B'] = 'N'

df.loc[df['C'].str.contains('J'), 'C'] = 'J'
df.loc[df['C'].str.contains('N'), 'C'] = 'N'
def clear_values(column_namestr):
    column_name = [column_namestr]
    print(type(column_name))
    #df.loc[df[column_name].str.contains('X'), 'spaltennamen'] = 'X'
    #df.loc[df[column_name].str.contains('o'), 'spaltennamen'] = 'o'

column_namestr = 'a'
df2 = clear_values(column_namestr)

But does not work...
Python DataFrame 变量 方法

评论

0赞 dm2 1/3/2023
你的意思是它不起作用?会发生什么?有什么事发生吗?收到错误吗?如果是这样,什么样的错误?

答:

0赞 White Wizard 1/3/2023 #1

如果要复制

df.loc[df['C'].str.contains('J'), 'C'] = 'J'
df.loc[df['C'].str.contains('N'), 'C'] = 'N'

使用函数,您可以执行以下操作

def clear_values(name1, name2):
    df.loc[df[name1].str.contains(name2), name1] = name2
clear_values('C', 'J')
clear_values('C', 'N')

如果您只想更改列,则可以执行以下操作:

def clear_values(column):
    df.loc[df[column].str.contains('J'), column] = 'J'
    df.loc[df[column].str.contains('N'), column] = 'N'
clear_values('B')
clear_values('C')