繁体   English   中英

正则表达式:删除之前的特定字符和数字

[英]Regex: remove specific characters and number before it

import pandas as pd
my_df = pd.DataFrame(columns = ['Energy', 'Value Energy'], 
data = [['348kcal/1476kj', '343kcal / 1451kj'], 
['2370 kj / 570 kcal', '86 kcal / 361kj'], 
['168 kcal', '110kcal464kj'], 
['1647 kj / 388 kcal', '441kcal'], 
['348 kcal1476 kj', '28kcal 121kj'], 
['86 kcal 361kj', '2370kj570kcal']])

我的示例 df 如下所示:

             Energy        Value Energy
 0      348kcal/1476kj  343kcal / 1451kj
 1  2370 kj / 570 kcal   86 kcal / 361kj
 2            168 kcal      110kcal464kj
 3  1647 kj / 388 kcal           441kcal
 4     348 kcal1476 kj      28kcal 121kj
 5       86 kcal 361kj     2370kj570kcal

在上面的示例df中,我想在它之前删除字符串和数字中的kj个字符。

我正在寻找可以给我 output 的正则表达式建议,如下所示:

              Energy      Value Energy
0             348kcal     343kcal
1            570 kcal     86 kcal
2            168 kcal     110kcal
3            388 kcal     441kcal
4            348 kcal     28kcal
5             86 kcal     570kcal

您可以定义一个 function 来清理文本,然后在列上使用apply function。 优点是您可以根据需要为不同的列定义单独的函数。

import pandas as pd
my_df = pd.DataFrame(columns = ['Energy', 'Value Energy'], data = [['348kcal/1476kj', '343kcal / 1451kj'], ['2370 kj / 570 kcal', '86 kcal / 361kj'], ['168 kcal', '110kcal464kj'], ['1647 kj / 388 kcal', '441kcal'], ['348 kcal1476 kj', '28kcal 121kj'], ['86 kcal 361kj', '2370kj570kcal']])

def clean(x):
    return re.search(r'(\d+\s*kcal)', x).group(0)

my_df['Energy'] = my_df['Energy'].apply(clean)
my_df['Value Energy'] = my_df['Value Energy'].apply(clean)

      Energy    Value Energy    
0   348kcal     343kcal 
1   570 kcal    86 kcal 
2   168 kcal    110kcal 
3   388 kcal    441kcal 
4   348 kcal    28kcal  
5   86 kcal     570kcal 

使用特定的正则表达式替换(一次通过):

In [52]: pat = re.compile(r'[\d\s/]*kj[\s/]*')                                                              

In [53]: my_df.apply(lambda s: s.str.replace(pat, ''))                                                      
Out[53]: 
     Energy Value Energy
0   348kcal      343kcal
1  570 kcal      86 kcal
2  168 kcal      110kcal
3  388 kcal      441kcal
4  348 kcal       28kcal
5   86 kcal      570kcal

您可能需要调用 apply 方法:

my_df.apply(lambda x: x.split('/')[0])

应该为你工作!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM