加快数据帧编码循环

时间:2020-02-17 22:23:46

标签: python pandas

在jupyter实验室中的Intel 8700 cpu上使用python 3.76,Pandas 1.0.1。 这段代码

import time
import base64
import numpy as np
import pandas as pd
#read in data
words = pd.read_table("BigFile.txt",names=['word'],encoding="utf-8",header=None)
#add a column to hold encoded data
dfWords = pd.DataFrame(columns=['sb64'])
start = time.perf_counter() 
#encode data and add it to column
for x in range(10000):
    dfWords = dfWords.append({'sb64':base64.b64encode(words.word[x].encode('UTF-8')).decode()},ignore_index=True)
end = time.perf_counter() 
print(end - start, "seconds")
print("Dataframe Contents ", dfWords, sep='\n')

产生此输出

12.090909591002855 seconds
Dataframe Contents 
                  sb64
0     ZGlmZmVyZW5jZQ==
1             d2hlcmU=
2                 bWM=
3                 aXM=
4                 dGhl
...                ...
9995      ZGl2ZXJ0b3I=
9996              aW4=
9997              d2Fz
9998              YXQ=
9999              dGhl

[10000 rows x 1 columns]

我的数据文件包含10,000,000行,因此比这个耗时12秒的小测试大了1000倍。

我试图这样做:

import time
import base64
dfWords = pd.DataFrame(columns=['sb64'])
start = time.perf_counter() 
dfWords['sb64']= words.word.str.encode('utf-8', 'strict').str.encode('base64').str.decode('utf-8', 'strict')
end = time.perf_counter() 
print(end - start, "seconds")
print(dfWords.tail())

但失败并出现错误

TypeError: Cannot use .str.encode with values of inferred dtype 'bytes'.

但是,如果我将Pandas降级为0.23可以正常工作,那么我可以在4秒钟内完成100万次输入。

3.5494491000026756 seconds
                      sb64
999995  ZGlzdHJpYnV0aW9u\n
999996              aW4=\n
999997      c2NlbmFyaW8=\n
999998          bGVzcw==\n
999999          bGFuZA==\n

因此,我完整的1000万行文件将耗时40秒。我是否必须学习C以及所有工具才能更快?还是有更好的Python方法?

0 个答案:

没有答案