我想用pandas读取CSV文件。两列各乘以一个不同的常数。
params = {
"table-columns": ['A', 'B'],
"multiplicands": ['0.001', '0.000001']
}
converters_ = {}
for i in range(0,len(params['table-columns'])):
column = params['table-columns'][i]
multiplicand = params['multiplicands'][i]
display(column + '/' + multiplicand)
func = lambda x: float(x) * float(multiplicand)
converters_[column] = func
display(converters_['A'](1)) # should be 1e-03
display(converters_['B'](1)) # should be 1e-06
#df = pd.read_csv('data.csv', converters=converters_)
输出:
'A/0.001'
'B/0.000001'
1e-06
1e-06
A列应该乘以0.001,但它乘以0.000001。bug在哪里?
问题是,func
,你已经存储在转换器_[0]和转换器_[1],不评估multiplicand
,直到你实际调用func
,在这一点multiplicand
是"0.000001"
你可以尝试用对eval()
的调用来替换对func
的赋值,这将multiplicand
的值硬编码到lambda的主体中:
func = eval(f"lambda x: float(x) * {float(multiplicand)}")
输出:
A/0.001
B/0.000001
0.001
1e-06