我想编写一个函数来清理数据帧的索引列。
删除具有高级ID的整行。例如,删除
East Kootenay (5901) 01010
将索引定制为7位数的低级ID。例如,转
East Kootenay A (5901017) RDA 02020
进入5901017
如果它有两个括号,则只保留第二个括号中的7位数字。例如,
Sechelt (Part) (5929803) IGD 02020
至5929803
Capital H (Part 1) (5917054) RDA 01020
至5917054
Capital H (Part 2) (5917056) RDA 02030
至5917056
T'Sou-ke 1 (Sooke 1) (5917817) IRI 01010
至5917817
T'Sou-ke 2 (Sooke 2) (5917818) IRI 00000
至5917818
仅适用于一个括号的代码示例是
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)
答案 0 :(得分:1)
我认为你打算'\(([^)]*)\)'
... hth
答案 1 :(得分:0)
我不理解第2点和第3点之间的区别。在这两种情况下,您只想提取括号中的7位数字?在这种情况下,我对正则表达式更加明确,例如\((\d{7})\)