gpt4 book ai didi

python - 将多个函数映射到 CSV 行

转载 作者:行者123 更新时间:2023-11-28 17:48:27 25 4
gpt4 key购买 nike

我正在尝试对完全由字符串组成的 CSV 数据进行一些类型转换。我在想我会使用标题名称字典来实现功能并将这些功能映射到每个 CSV 行。我对如何有效地将多个函数映射到一行有点困惑。我正在考虑枚举标题并创建一个新的函数索引字典:

header_map = {'Foo':str,
'Bar':str,
'FooBar':float}

csv_data = [('Foo', 'Bar', 'FooBar'),
#lots of data...
]

index_map = {}

#enumerate the rows and create a dictionary of index:function
for i, header in enumerate(csv_data[0]):
index_map[i] = header_map[header]

#retrieve the function for each index and call it on the value
new_csv = [[index_map[i](value) for i, value in enumerate(row)]
for row in csv_data[1:]]

我很好奇是否有人知道完成此类操作的更简单、有效的方法?

最佳答案

这里有一个方法,using_converter,稍微快一点:

import itertools as IT

header_map = {'Foo':str,
'Bar':str,
'FooBar':float}

N = 20000
csv_data = [('Foo', 'Bar', 'FooBar')] + [('Foo', 'Bar', 1123.451)]*N

def original(csv_data):
index_map = {}
#enumerate the rows and create a dictionary of index:function
for i, header in enumerate(csv_data[0]):
index_map[i] = header_map[header]

#retrieve the appropriate function for each index and call it on the value
new_csv = [[index_map[i](value) for i, value in enumerate(row)]
for row in csv_data[1:]]
return new_csv

def using_converter(csv_data):
converters = IT.cycle([header_map[header] for header in csv_data[0]])
conv = converters.next
new_csv = [[conv()(item) for item in row] for row in csv_data[1:]]
return new_csv

def using_header_map(csv_data):
heads = csv_data[0]
new_csv = [
tuple(header_map[head](item) for head, item in zip(heads, row))
for row in csv_data[1:]]
return new_csv

# print(original(csv_data))
# print(using_converter(csv_data))
# print(using_header_map(csv_data))

使用 timeit 进行基准测试:

原代码:

% python -mtimeit -s'import test' 'test.original(test.csv_data)'
100 loops, best of 3: 17.3 msec per loop

稍微快一点的版本(使用 itertools):

% python -mtimeit -s'import test' 'test.using_converter(test.csv_data)'
100 loops, best of 3: 15.5 msec per loop

Lev Levitsky 的版本:

% python -mtimeit -s'import test' 'test.using_header_map(test.csv_data)'
10 loops, best of 3: 36.2 msec per loop

关于python - 将多个函数映射到 CSV 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14380488/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com