搜索模式不唯一?正则表达式

2024-09-29 00:16:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我想写一个函数来清除数据帧的索引列。你知道吗

  1. 删除具有高级标识的整行。例如,删除

    East Kootenay (5901) 01010

  2. 将索引裁剪为7位数字,以用于低级ID。例如,转弯

    East Kootenay A (5901017) RDA 02020 变成5901017

  3. 如果有两个圆括号,只保留第二个圆括号中的7位数字。例如

    Sechelt (Part) (5929803) IGD 020205929803

    Capital H (Part 1) (5917054) RDA 010205917054

    Capital H (Part 2) (5917056) RDA 020305917056

    T'Sou-ke 1 (Sooke 1) (5917817) IRI 010105917817

    T'Sou-ke 2 (Sooke 2) (5917818) IRI 000005917818

代码只适用于一个括号的示例是

def extract_id(s):
    m = re.search('\((.*)\)', s)
    if m:
        i = int(m.group(0)[1:-1])
        return i

if __name__ == '__main__':
    # Read data
    census_subdivision_profile = pd.read_excel('../data/census_subdivision_profile.xlsx', sheetname='Data',
                                               index_col='Geography', encoding='utf-8').T
    print(census_subdivision_profile.head())
    print(census_subdivision_profile.shape)

    census_subdivision_profile.index = census_subdivision_profile.index.map(extract_id)
    print(census_subdivision_profile.index)

要查看完整的代码,请参阅我之前发布的另一个问题

Merge dataframes that have indices that one contains another (but not the same)


Tags: index数字profilecensusprinteastpartke
2条回答

我不明白第二点和第三点之间的区别。在这两种情况下,你只是想提取括号中的7位数字?在这种情况下,我会更明确地使用regex,比如\((\d{7})\)

我想你打算'\(([^)]*)\)'。。。hth公司

相关问题 更多 >