【问题标题】:Pandas rename columns with wildcardPandas 使用通配符重命名列
【发布时间】:2018-03-24 05:29:03
【问题描述】:

我的 df 看起来像这样:

Datum   Zeit    Temperatur[°C]     Luftdruck   Windgeschwindigkeit[m/s]    Windrichtung[Grad]  Relative Luftfeuchtigkeit[%]    Globalstrahlung[W/m²]

现在我想像这样重命名列:#

wetterdaten.rename(columns={'Temperatur%': 'Temperatur', 'Luftdruck[hPa]': 'Luftdruck'}, inplace=True)

% 是通配符。 但当然不会像这样工作。

日志数据中列名的开头始终相同, 但结局会随时间变化。

【问题讨论】:

    标签: pandas rename wildcard


    【解决方案1】:

    您可以过滤列并获取名称:

    wetterdaten.rename(columns={wetterdaten.filter(regex='Temperatur.*').columns[0]: 'Temperatur', 
                                wetterdaten.filter(regex='Luftdruck.*').columns[0]: 'Luftdruck'},
                       inplace=True)
    

    【讨论】:

      【解决方案2】:

      另外,你可以试试下面的代码;它将#Item Code无条件替换为Item Name

      代码:

      pd.rename(columns = {'#Item Code':'Item Name'}, inplace = True)
      

      【讨论】:

        【解决方案3】:

        你可以准备一个函数来重命名你的列:

        rename_columns(old_name):
            if old_name == 'Temperatur':
                new_name = old_name + whichever_you_wants    # may be another function call
            elif old_name == 'Luftdruck':
                new_name = 'Luftdruck[hPa]'
            else:
                new_name = old_name
            return new_name
        

        然后将该函数用作参数的.rename() 方法:

        wetterdaten.rename(columns=rename_columns, inplace=True)
        

        【讨论】:

        • 这可能不是 OP 所需要的,但这正是我所需要的。这是迄今为止最干净的解决方案。不错!
        【解决方案4】:

        您可以通过dict 使用replace,对于通配符使用.* 和作为字符串开头^

        d = {'^Temperatur.*': 'Temperatur', 'Luftdruck[hPa]': 'Luftdruck'}
        df.columns = df.columns.to_series().replace(d, regex=True)
        

        示例:

        cols = ['Datum',   'Zeit',    'Temperatur[°C]', 'Luftdruck' ,  'Windgeschwindigkeit[m/s]',
                'Windrichtung[Grad]',  'Relative Luftfeuchtigkeit[%]',   ' Globalstrahlung[W/m²]']
        
        df = pd.DataFrame(columns=cols)
        print (df)
        Empty DataFrame
        Columns: [Datum, Zeit, Temperatur[°C], Luftdruck, Windgeschwindigkeit[m/s], 
                  Windrichtung[Grad], Relative Luftfeuchtigkeit[%],  Globalstrahlung[W/m²]]
        Index: []
        
        d = {'^Temperatur.*': 'Temperatur', 'Luftdruck.*': 'Luftdruck'}
        df.columns = df.columns.to_series().replace(d, regex=True)
        print (df)
        
        Empty DataFrame
        Columns: [Datum, Zeit, Temperatur, Luftdruck, Windgeschwindigkeit[m/s], 
                  Windrichtung[Grad], Relative Luftfeuchtigkeit[%],  Globalstrahlung[W/m²]]
        Index: []
        

        【讨论】:

        • 这不是我想要的。
        猜你喜欢
        • 2021-05-19
        • 1970-01-01
        • 2012-09-18
        • 1970-01-01
        • 1970-01-01
        • 2021-09-27
        • 2019-12-01
        • 2016-12-19
        • 1970-01-01
        相关资源
        最近更新 更多