是否可以在 python 中的 df[ ] 中放置一个字符串?
Is it possible to place a string inside df[ ] in python?
我知道这很糟糕。我真的很想知道这是否可以在 python 中完成,所以我现在有两个带有算术方程式的字符串,我想将它们放在 df[ ] 中。 df 是一个数据框 这可以吗?
X = "'cars'+'bikes'*'planes'"
现在应该像下面这样放置
X = df['cars']+df['bikes']*df['planes']
如果可以怎么办?
我假设您知道使用 eval
的后果。
s = "'cars'+'bikes'*'planes'"
df['out'] = eval(re.sub(r"([^+\-*\/]+)", r'df[]', s))
所做的基本上是替代品df
。它将 'cars'+'bikes'*'planes'
更改为 df['cars']+df['bikes']*df['planes']
。
如果你不想使用 eval
你可以解析 column names
和 operands
like
columns = re.findall(r"'([^+\-*\/]+)'", s)
operands = re.findall(r'([+\-*\/]+)', s)
但在这种情况下,您需要定义操作优先级并创建树来计算结果。
更新
import re
import pandas as pd
s = "'cars'+30*'bikes'-'planes'+20"
s2 = re.sub(r"('[^+\-*\/'\d]+')", r'df[]', s)
pd.eval(s2)
我知道这很糟糕。我真的很想知道这是否可以在 python 中完成,所以我现在有两个带有算术方程式的字符串,我想将它们放在 df[ ] 中。 df 是一个数据框 这可以吗?
X = "'cars'+'bikes'*'planes'"
现在应该像下面这样放置
X = df['cars']+df['bikes']*df['planes']
如果可以怎么办?
我假设您知道使用 eval
的后果。
s = "'cars'+'bikes'*'planes'"
df['out'] = eval(re.sub(r"([^+\-*\/]+)", r'df[]', s))
所做的基本上是替代品df
。它将 'cars'+'bikes'*'planes'
更改为 df['cars']+df['bikes']*df['planes']
。
如果你不想使用 eval
你可以解析 column names
和 operands
like
columns = re.findall(r"'([^+\-*\/]+)'", s)
operands = re.findall(r'([+\-*\/]+)', s)
但在这种情况下,您需要定义操作优先级并创建树来计算结果。
更新
import re
import pandas as pd
s = "'cars'+30*'bikes'-'planes'+20"
s2 = re.sub(r"('[^+\-*\/'\d]+')", r'df[]', s)
pd.eval(s2)