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

lx0bsm1f  于 2023-01-04  发布在  Python
关注(0)|答案(1)|浏览(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...
fnvucqvd

fnvucqvd1#

如果你想复制

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')

相关问题