如何为 pandas 创建转换器?

How to create converters for pandas?

我想用 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。这里的错误在哪里?

问题是您存储在 converters_[0] 和 converters_[1] 中的 func 不会计算 multiplicand,直到您实际调用 func,时间为哪一点 multiplicand 是“0.000001”。

您可以尝试将对 func 的赋值替换为对 eval() 的调用,该调用将 multiplicand 的值硬编码到 lambda 的主体中:

    func = eval(f"lambda x: float(x) * {float(multiplicand)}")

输出:

A/0.001
B/0.000001
0.001
1e-06