如何为 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
我想用 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