Exec 函数在 Python 中无法使用 pandas 数据框

Exec function won't work in Python with a pandas dataframe

我有一个名为 source_data 的初始数据框。

我有一个单独的文本文件,允许用户放置一些 python 代码用于某些过滤条件。我知道这被视为不好的做法,但我的公司向我保证这样做是安全的。我已经注意到我的顾虑,但我已经开了绿灯。

因此,此 CSV 的单元格中包含此字符串:source_data.loc[source_data['CONFIG_ID'] == 3]

这是作为列表读入的。例如,这里有两个打印:

print('Number of where clause conditions found: ' + str(len(segmentFilterCriteria)))
print('Where clause criteria: ' + str(segmentFilterCriteria))

控制台显示:

Number of where clause conditions found: 1
Where clause criteria: ["source_data.loc[source_data['CONFIG_ID'] == 3]"]

现在,当我 运行 这个(即使用文本字符串和 exec 函数)时,我的 base_data 数据框显示为 NoneType:

print(segmentFilterCriteria[0])
base_data = exec(segmentFilterCriteria[0])
print(base_data.columns)

控制台显示:

source_data.loc[source_data['CONFIG_ID'] == 3]
Traceback (most recent call last):

  File "<ipython-input-95-17bc7d85852e>", line 3, in <module>
    print(base_data.columns)

AttributeError: 'NoneType' object has no attribute 'columns'

然而,当我像这样输入代码时,它工作正常:

base_data = source_data.loc[source_data['CONFIG_ID'] == 3]
print(base_data.columns)

控制台显示:

Index(['CONFIG_ID', 'ACCOUNT_DEAL_ID', 'FACILITY_ID',
       'M12_PD_INITIAL_RECOG_VAL',
...

为什么在 exec 函数中执行的字符串在这种情况下不起作用?

exec() 函数没有 return 任何结果。它总是 returns None。 你应该这样使用它:

print(segmentFilterCriteria[0])
exec('base_data=' + segmentFilterCriteria[0])
print(base_data.columns)