能够从JSON配置文件中读取和eval()任意函数/ lambda

时间:2016-09-22 17:08:28

标签: python json lambda

我正在寻找一种方法让用户输入任意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'

1 个答案:

答案 0 :(得分:1)

Python中的eval函数不是附加到字符串的方法;它是一个全球可用的功能。你应该可以这样称呼它:

eval(..)

如果您尝试根据df['state_abbrev']的内容转换lambda_transform_str,则需要以另一种方式解决此问题。

eval('"{}".upper()'.format(df['state_abbrev']))

这有明显的局限性,因为您必须确保您的文字功能都与str类型兼容,但这是我将留给您的实施细节。

正如@martineau在评论中指出的那样,要谨慎使用eval。它可能会将代码库暴露给严重的安全漏洞。