Python - 如何提高数据帧性能?

Python - 如何提高数据帧性能?

问题描述:

有2个CSV文件。每个文件有700,000行。Python - 如何提高数据帧性能?

我应该逐行读取一个文件,并从另一个文件中找到同一行。

然后,将两个文件数据作为一个文件数据。

但是,每1,000行大约需要1分钟!!

我不知道如何提高性能。

这里是我的代码:

import pandas as pd 

fail_count = 0 
match_count = 0 
count = 0 

file1_df = pd.read_csv("Data1.csv", sep='\t') 
file2_df = pd.read_csv("Data2.csv", sep='\t') 

columns = ['Name', 'Age', 'Value_file1', 'Value_file2'] 
result_df = pd.DataFrame(columns=columns) 

for row in fil1_df.itterow(): 

    name = row[1][2] 
    position = row[1][3] 

    selected = file2_df[(file2_df['Name'] == name) & (file2_df['Age'] == age)] 

    if selected.empty : 
     fail_count += 1 
     continue 

    value_file1 = row[1][4] 
    value_file2 = selected['Value'].values[0] 

    result_df.loc[len(result_df)] = [name, age, value_file1, value_file2] 

    match_count += 1 

print('match : ' + str(match_count)) 
print('fail : ' + str(fail_count)) 
result_df.to_csv('result.csv', index=False, encoding='utf-8') 

哪条线是可以改变的?

有没有其他的方法来做这个过程?

这可能太简单了,但是您是否尝试过使用pandas.merge()的功能?

查看here的语法。

为了您的表:

result_df = pd.merge(left=file1_df, right=file2_df, on=['Name', 'Age'], how='inner') 

这将做一个“内部”的加入,只保留行与名称&中世纪匹配两个表中的那个。 OMG !!

+0

OMG !!这就是我想要的! 你节省了我的时间和生命;)非常感谢你! – BingbongKim

+0

@BingbongKim,一般来说,如果你正在使用带有熊猫数据框的_for_循环,你可能会做错了,并且使用一些熊猫方法可能是更好的方法。当然,这有一些例外。 –