我有大约4M行的大数据集。我需要用正则表达式清理它并放入Pandas的DataFrame中。这是我的代码:
# 1) reading a text file with a dataset, where 4M rows
orgfile = open("good_dmoz.txt", "r")
# 2) create an empty dataframe
df0=pd.DataFrame(columns=['url'])
# 3) creating mask for cleaning data
regex = re.compile(r"(?<=\')(.*?)(?=\')")
# 4) clearing data and put into the dataframe
for line in orgfile:
urls = regex.findall(line)
df0.url = df0.append({"url": urls[0]}, ignore_index=True)
代码以小片段处理任务,但处理完整数据(4M行)需要太长时间。我的问题是:是否可以优化代码?通过优化,我的意思是降低代码执行的速度。
谢谢!
答案 0 :(得分:0)
我同意对这个问题的评论。但是,我们都是从某个地方开始的。如其他人所提到的,Shokan由于append
和for
循环而导致您遇到的性能问题。试试这个:
<强> 1。从文本文件创建pandas数据框,仅一列,每行一行
df_rawtext = pd.read_csv('good_dmoz.txt', header = None, names = ['raw_data'], sep = '\n')
<强> 2。测试每行是否存在正则表达式和过滤器:
PATTERN = r"(?<=\')(.*?)(?=\')"
df_rawtext = df_rawtext.loc[df_rawtext.iloc[:,0].str.contains(PATTERN)]
第3。提取模式
df_rawtext['URL'] = df_rawtext['raw_data'].str.extract(PATTERN, expand = False)
<强>注释强>
我在这里执行第2步,因为第3步将为没有匹配的行引发错误。
ValueError: pattern contains no capture groups
如果有人知道更好的方式,请随时做出贡献。我渴望学习。