kolja
kolja

Reputation: 547

Pandas rename columns with wildcard

My df looks like this:

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

Now i want to rename the columns like this:#

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

Where % is a wildcard. But of course it will not work like this.

The beginning of the column name is always the same in the log data, but the ending is temporally changing.

Upvotes: 2

Views: 3068

Answers (4)

zipa
zipa

Reputation: 27879

You can filter the columns and fetch the name:

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

Upvotes: 5

user8278334
user8278334

Reputation: 1

Also, you can try the below code; Which replaces #Item Code into Item Name without condition.

Code:

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

Upvotes: 0

MarianD
MarianD

Reputation: 14181

You may prepare a function for renaming you columns:

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

and then use the .rename() method with that function as a parameter:

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

Upvotes: 1

jezrael
jezrael

Reputation: 863166

You can use replace by dict, for wildcard use .* and for start of string ^:

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

Sample:

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: []

Upvotes: 4

Related Questions