如何为熊猫创建转换器?



我想用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

相关内容

  • 没有找到相关文章