如何将Pandas DataFrame公式中的**转换为Pow函数形式?
解决方案:将公式中的幂运算**转换为Pow函数形式
可以通过正则表达式配合pandas的字符串替换方法来实现需求,核心思路是匹配X**Y的结构,将其替换为Pow(X,Y)的格式。
实现代码
import pandas as pd import re data = { 'Input_Equation': [ '0.06*Log(Sqrt(K / POR))**2 + 0.11', '4.96861155787536*(0.917 - POR)**3', '3.80241264879314*POR**2' ] } df = pd.DataFrame(data) # 定义正则模式,捕获**前后的表达式和幂次 pattern = r'(.+?)\*\*(\d+\.?\d*|\w+)' # 替换为Pow函数格式 df['Output_Equation'] = df['Input_Equation'].str.replace(pattern, r'Pow(\1,\2)', regex=True) print(df)
代码解释
- 正则模式
r'(.+?)\*\*(\d+\.?\d*|\w+)':(.+?):非贪婪匹配**之前的所有内容(包括函数调用、括号、运算符等),确保完整捕获幂运算的底数部分\*\*:匹配连续的两个星号(幂运算符号)(\d+\.?\d*|\w+):匹配幂次部分,支持整数/小数数字或变量名
str.replace(pattern, r'Pow(\1,\2)', regex=True):使用反向引用\1和\2分别调用捕获到的底数和幂次,拼接成Pow(X,Y)的格式
运行结果
执行代码后得到的DataFrame与示例中的预期输出完全一致:
Input_Equation Output_Equation 0 0.06*Log(Sqrt(K / POR))**2 + 0.11 0.06*Pow(Log(Sqrt(K / POR)),2) + 0.11 1 4.96861155787536*(0.917 - POR)**3 4.96861155787536*Pow((0.917 - POR),3) 2 3.80241264879314*POR**2 3.80241264879314*Pow(POR,2)
内容的提问来源于stack exchange,提问作者user17786602
相关产品推荐
相关产品推荐

