regex Python Pandas拆分包含整数和字符串的列

46qrfjad  于 2023-10-22  发布在  Python
关注(0)|答案(1)|浏览(99)

我有一个包含描述的pandas数据列,希望将该列拆分为多个列。
一个单元格可能包含的内容示例:
| 绝缘说明|
| --|
| 100 mm阁楼隔热|
| 75 mm阁楼隔热层|
| 绝缘(假设)|
| 没有绝缘|
理想的输出应该是2列-一列是测量值(在可能的情况下,mm之前的整数),第二列是“mm”之后的所有文本或没有数字的所有文本-我试图使用“mm”分割它们,但我没有得到想要的输出。
| 绝缘厚度|绝缘|
| --|--|
| 100 |阁楼绝缘|
| 75 |阁楼绝缘|
| 楠|绝缘(假设)|
| 楠|没有绝缘|
我尝试使用str.split()来拆分单元格,并将'mm'作为要查找的模式,但这不起作用。
df_split = df['Insulation-description'].str.split('mm', expand=True, regex=r'[0-9]*').add_prefix('Insulation-description_')
我也尝试了str.extract(),如下所示:
df_split = df['Insulation-description'].str.extract(r'(?P<InsulationThickness>(\d+))(?P<Insulation>)(\D+)')
这将数字提取到InsulationThickness列中,但将Insulation列留空。

pgccezyw

pgccezyw1#

使用str.extractall

df = pd.DataFrame({'desc': ['100 mm loft insulation 75 mm loft insulation insulation (assumed) no insulation']})

out = out = df['desc'].str.extractall(r'(?P<InsulationThickness>\d+)\s*mm\s+(?P<Insulation>\D*[^\s\d])')

输出量:

InsulationThickness                                          Insulation
  match                                                                        
0 0                     100                                     loft insulation
  1                      75  loft insulation insulation (assumed) no insulation

regex demo

更新问题:

df['InsulationDescription'].str.extract(r'(?:(?P<InsulationThickness>\d+)\s*mm\s+)?(?P<Insulation>\D*[^\s\d])')

输出量:

InsulationThickness            Insulation
0                 100       loft insulation
1                  75       loft insulation
2                 NaN  insulation (assumed)
3                 NaN         no insulation

相关问题