Pandas rename columns with wildcard










1















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.










share|improve this question




























    1















    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.










    share|improve this question


























      1












      1








      1








      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.










      share|improve this question
















      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.







      pandas rename wildcard






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 13 '18 at 5:01









      Cœur

      17.5k9104145




      17.5k9104145










      asked Oct 12 '17 at 10:05









      koljakolja

      125




      125






















          3 Answers
          3






          active

          oldest

          votes


















          2














          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)





          share|improve this answer






























            1














            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:





            share|improve this answer

























            • That is not what i want.

              – kolja
              Oct 12 '17 at 10:20


















            0














            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)





            share|improve this answer






















              Your Answer






              StackExchange.ifUsing("editor", function ()
              StackExchange.using("externalEditor", function ()
              StackExchange.using("snippets", function ()
              StackExchange.snippets.init();
              );
              );
              , "code-snippets");

              StackExchange.ready(function()
              var channelOptions =
              tags: "".split(" "),
              id: "1"
              ;
              initTagRenderer("".split(" "), "".split(" "), channelOptions);

              StackExchange.using("externalEditor", function()
              // Have to fire editor after snippets, if snippets enabled
              if (StackExchange.settings.snippets.snippetsEnabled)
              StackExchange.using("snippets", function()
              createEditor();
              );

              else
              createEditor();

              );

              function createEditor()
              StackExchange.prepareEditor(
              heartbeatType: 'answer',
              autoActivateHeartbeat: false,
              convertImagesToLinks: true,
              noModals: true,
              showLowRepImageUploadWarning: true,
              reputationToPostImages: 10,
              bindNavPrevention: true,
              postfix: "",
              imageUploader:
              brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
              contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
              allowUrls: true
              ,
              onDemand: true,
              discardSelector: ".discard-answer"
              ,immediatelyShowMarkdownHelp:true
              );



              );













              draft saved

              draft discarded


















              StackExchange.ready(
              function ()
              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f46706850%2fpandas-rename-columns-with-wildcard%23new-answer', 'question_page');

              );

              Post as a guest















              Required, but never shown

























              3 Answers
              3






              active

              oldest

              votes








              3 Answers
              3






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes









              2














              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)





              share|improve this answer



























                2














                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)





                share|improve this answer

























                  2












                  2








                  2







                  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)





                  share|improve this answer













                  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)






                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Oct 12 '17 at 10:31









                  zipazipa

                  16k31437




                  16k31437























                      1














                      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:





                      share|improve this answer

























                      • That is not what i want.

                        – kolja
                        Oct 12 '17 at 10:20















                      1














                      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:





                      share|improve this answer

























                      • That is not what i want.

                        – kolja
                        Oct 12 '17 at 10:20













                      1












                      1








                      1







                      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:





                      share|improve this answer















                      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:






                      share|improve this answer














                      share|improve this answer



                      share|improve this answer








                      edited Oct 12 '17 at 10:39

























                      answered Oct 12 '17 at 10:17









                      jezraeljezrael

                      324k22266342




                      324k22266342












                      • That is not what i want.

                        – kolja
                        Oct 12 '17 at 10:20

















                      • That is not what i want.

                        – kolja
                        Oct 12 '17 at 10:20
















                      That is not what i want.

                      – kolja
                      Oct 12 '17 at 10:20





                      That is not what i want.

                      – kolja
                      Oct 12 '17 at 10:20











                      0














                      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)





                      share|improve this answer



























                        0














                        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)





                        share|improve this answer

























                          0












                          0








                          0







                          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)





                          share|improve this answer













                          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)






                          share|improve this answer












                          share|improve this answer



                          share|improve this answer










                          answered Oct 12 '17 at 11:30









                          MarianDMarianD

                          4,28761331




                          4,28761331



























                              draft saved

                              draft discarded
















































                              Thanks for contributing an answer to Stack Overflow!


                              • Please be sure to answer the question. Provide details and share your research!

                              But avoid


                              • Asking for help, clarification, or responding to other answers.

                              • Making statements based on opinion; back them up with references or personal experience.

                              To learn more, see our tips on writing great answers.




                              draft saved


                              draft discarded














                              StackExchange.ready(
                              function ()
                              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f46706850%2fpandas-rename-columns-with-wildcard%23new-answer', 'question_page');

                              );

                              Post as a guest















                              Required, but never shown





















































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown

































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown







                              這個網誌中的熱門文章

                              How to read a connectionString WITH PROVIDER in .NET Core?

                              In R, how to develop a multiplot heatmap.2 figure showing key labels successfully

                              Museum of Modern and Contemporary Art of Trento and Rovereto