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)
我有一个名为 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)