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

时间:2017-09-22 22:13:04

标签: python dataframe

有2个CSV文件。每个文件有700,000行。

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

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

但是,每1000行只需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')

哪条线可以更改?

还有其他方法可以执行此过程吗?

1 个答案:

答案 0 :(得分:1)

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

请参阅here了解语法。

对于你的桌子:

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

那会做一个"内部"加入,只保留名称和行的行在两个表中匹配的年龄。