首页 > 解决方案 > 根据条件重命名熊猫数据框的多列

问题描述

我有一个 df,我需要将 40 个列名重命名为空字符串。这可以通过使用来实现.rename(),但我需要提供dict中的所有列名,需要重命名。我正在寻找一些更好的方法来通过一些模式匹配来重命名列。在列名中找到 NULL/UNNAMED 的任何位置,将其替换为空字符串。

df1:原始df(在实际df中,我有大约20列作为NULL1-NULL20和20列作为UNNAMED1-UNNAMED20)

    NULL1   NULL2   C1  C2  UNNAMED1    UNNAMED2
0   1   11  21  31  41  51
1   2   22  22  32  42  52
2   3   33  23  33  43  53
3   4   44  24  34  44  54

所需的输出df:

            C1  C2      
0   1   11  21  31  41  51
1   2   22  22  32  42  52
2   3   33  23  33  43  53
3   4   44  24  34  44  54

这可以通过

df.rename(columns={'NULL1':'', 'NULL2':'', 'UNNAMED1':'', 'UNNAMED2':''}, inplace=True)

但我不想创建包含 40 个元素的长字典

标签: pythonpython-3.xpandas

解决方案


如果你想坚持rename

def renaming_fun(x):
    if "NULL" in x or "UNNAMED" in x:
        return "" # or None
    return x

df = df.rename(columns=renaming_fun)

如果映射函数变得更复杂,它会很方便。否则,列表推导会:

df.columns = [renaming_fun(col) for col in cols]

另一种可能:

df.columns = map(renaming_fun, df.columns)

但正如已经提到的,用空字符串重命名不是你通常会做的事情。


推荐阅读