【问题标题】:Rename column in dataframe that contains digits in the middle重命名数据框中包含中间数字的列
【发布时间】:2021-01-24 06:29:09
【问题描述】:

假设我有一个数据框列 df.info():

 #   Column                       Non-Null Count  Dtype 
---  ------                       --------------  ----- 
 0   Action_3.@source             1 non-null      object
 1   Description_3.#text          1 non-null      object
 2   Code_3.@source               1 non-null      object
 3   Others                       1 non-null      object
 4   Animal_1                     1 non-null      object

收件人:

 #   Column                       Non-Null Count  Dtype 
---  ------                       --------------  ----- 
 0   Action.@source_3             1 non-null      object
 1   Description.#text_3          1 non-null      object
 2   Code.@source_3               1 non-null      object
 3   Others                       1 non-null      object
 4   Animal_1                     1 non-null      object

这需要动态完成。我的计划是:

  1. 使用正则表达式查找字符串中间的数字。
  2. _{digit} 替换为列名的后面,反复进行。

我当前的代码:

def check_number_in_column(column_name):

    return any(i.isdigit() for i in column_name)


# List out the column names then loop
temp_column_name = temp_df.columns

for j, name in enumerate(temp_column_name):            

    if check_number_in_column(name) is True :
    #TODO

【问题讨论】:

    标签: python pandas dataframe rename


    【解决方案1】:

    您可以使用正则表达式和 pandas 的 str.replace 来动态更改它:

    df = pd.DataFrame(
        [],
        columns=[
            "Action_3.@source",
            "Description_3.#text",
            "Code_3.@source",
            "Others",
            "Animal_1",
        ],
    )
    
    pat = r"(?P<first>.+)(?P<middle>_\d)(?P<last>.+)"
    repl = lambda m: f"{m.group('first')}{m.group('last')}{m.group('middle')}"
    
    df.columns.str.replace(pat, repl)
    
    Index(['Action.@source_3', 'Description.#text_3', 'Code.@source_3', 'Others',
           'Animal_1'],
          dtype='object')
    

    如果你想避免使用 lambda,你也可以定义函数:

    def repl(m):
        return f"{m.group('first')}{m.group('last')}{m.group('middle')}"
    

    应用功能:

    df.columns.str.replace(pat, repl=repl)
    

    【讨论】:

    • 有什么方法可以避免 lambda?
    • lambda 只是一个匿名函数。你可以只定义一个函数。
    • 哪一个? lambda 或定义的函数?你分享的示例代码?
    猜你喜欢
    • 2015-12-29
    • 2018-12-26
    • 2022-01-02
    • 1970-01-01
    • 2021-11-01
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多