我正在寻找一种方法让用户输入任意python公式,将公式存储在文本文件或JSON文件中,然后让Python读取公式并将转换应用于数据框。我最初的要求是拥有一个前端Web UI,用户可以在其中指定任何转换规则/脚本/公式。
例如:
import pandas as pd
import numpy as np
df = pd.DataFrame({'state_full': ['Alabama', 'Alaska', 'American Samoa'],
'state_abbrev': ['Ala.', 'Alaska', np.nan],
'state_postal': ['AL', 'AK', 'AS']}, index=[0, 1, 2])
df['state_abbrev'].str.upper() # This works, but I need to read the formula from a file
希望能够从JSON中的配置文件中读取任意lambda函数:
lambda_transform_str = "str.upper()"
df['state_abbrev'].eval(lambda_transform_str)
遇到错误: AttributeError:'Series'对象没有属性'eval'
答案 0 :(得分:1)
Python中的eval
函数不是附加到字符串的方法;它是一个全球可用的功能。你应该可以这样称呼它:
eval(..)
如果您尝试根据df['state_abbrev']
的内容转换lambda_transform_str
,则需要以另一种方式解决此问题。
eval('"{}".upper()'.format(df['state_abbrev']))
这有明显的局限性,因为您必须确保您的文字功能都与str
类型兼容,但这是我将留给您的实施细节。
正如@martineau在评论中指出的那样,要谨慎使用eval
。它可能会将代码库暴露给严重的安全漏洞。