python - 让处理 2400 万条记录的 python 代码更快
问题描述
我正在尝试处理熊猫数据框。我正在将功能应用于其中一列。
功能是:
def separate_string(sentence):
string_even = ""
if sentence is not None:
l = list(sentence)
list_even = list()
index = 0
for letter in l:
if index % 2 != 0:
if abs(ord(letter)-3) < 1114111:
list_even.append((chr(abs(ord(letter)-3))))
string_even = "".join(list_even)
index += 1
return(str(string_even))
熊猫数据框:
df['re'] = df.col1.apply(separate_string)
我在具有 64GB RAM 2.19Ghz 7 处理器的 PC 上运行它。为什么代码永远不会完成?
解决方案
我认为这可以满足您的要求。如果需要,您可能必须显式返回None
,而不是空字符串。
删除了很多东西,例如不需要的强制转换和索引的手动维护以及代码点小于 1114111 的测试,因为它们都将是。
def separate_string(sentence):
return "".join(chr(abs(ord(letter) -3)) for letter in sentence[1::2])
我们可以timeit
看看我们是否有改进:
import timeit
setup_orig = '''
test = "This eBook is for the use of anyone anywhere in the United States and most other parts of the world at no cost and with almost no restrictions whatsoever."
def separate_string(sentence):
string_even = ""
if sentence is not None:
l = list(sentence)
list_even = list()
index = 0
for letter in l:
if index % 2 != 0:
if abs(ord(letter)-3) < 1114111:
list_even.append((chr(abs(ord(letter)-3))))
string_even = "".join(list_even)
index += 1
return(str(string_even))
'''
setup_new = '''
test = "This eBook is for the use of anyone anywhere in the United States and most other parts of the world at no cost and with almost no restrictions whatsoever."
def separate_string(sentence):
return "".join(chr(abs(ord(letter) -3)) for letter in sentence[1::2])
'''
print(timeit.timeit('separate_string(test)', setup=setup_orig, number=100_000))
print(timeit.timeit('separate_string(test)', setup=setup_new, number=100_000))
在我的笔记本电脑上,结果如下:
5.33
0.95
因此,作为解决方案的一部分,它似乎值得探索。
推荐阅读
- facebook-opengraph - 在线课程页面的开放图形类型
- javascript - onSubmit 表单将数据发送到 React 中的另一个组件/路由
- javascript - 用 ThreeJS 替换空间中的平面
- python - 如果 S3 上已经存在相同的图像,如何避免使用 scrapy 图像管道上传相同的图像?
- python - 如何将项目从 QTreeWidget 移动到 QListWidget?
- javascript - 数据表特定列数据截断不适用于 chrome
- angular - 以角度将数据从组件传递到html
- html - 当用户悬停时如何显示更多信息?
- javascript - 如何停止 AJAX 调用?
- apache - 访问应用程序的问题:请求实体太大:413 错误