Pandas 使用通配符重命名列

Pandas rename columns with wildcard

我的 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)

其中 % 是通配符。 不过这样当然不行了

列名的开头在日志数据中始终相同, 但结局是暂时改变的。

您可以通过 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: []

您可以筛选列并获取名称:

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

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

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)

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

代码:

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