蟒蛇。填充DataFrame:代码优化

时间:2018-06-12 02:21:43

标签: python pandas dataframe optimization

我有大约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行)需要太长时间。我的问题是:是否可以优化代码?通过优化,我的意思是降低代码执行的速度。

谢谢!

1 个答案:

答案 0 :(得分:0)

我同意对这个问题的评论。但是,我们都是从某个地方开始的。如其他人所提到的,Shokan由于appendfor循环而导致您遇到的性能问题。试试这个:

<强> 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

如果有人知道更好的方式,请随时做出贡献。我渴望学习。