[英]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.