通过分块读取大的csv文件并使用另一个csv文件中存在的相同标头来提取特定行



我有两个文件,file1.csv和一个名为master_file.csv的大csv。它们有几个列,并且有一个通用的列名为EMP_Code。

file1示例:

>EMP_Code>td style="text-align:center;">abc>abc
EMP_name
a s283
b f367 xyz
d c264

一种解决方案是使用内置的csv库来更好地处理内存。尽管它可以防止内存不足的问题,但由于使用for循环逐个扫描行,可能需要一些时间才能完成。

假设这两个样本文件:

file1.csv:

EMP_name,EMP_Code,EMP_dept
a,s283,abc
b,f367,xyz
d,c264,abc

master_file.csv:

EMP_name,EMP_age,EMP_Service,EMP_Code,EMP_dept
a,30,6,s283,abc
b,29,3,f367,xyz
r,27,1,g364,lmn
d,45,10,c264,abc
t,50,25,t453,lmn

您可以使用以下代码段(如果您想保留file1的记录而不是master_file的记录,请使用注释行而不是selected_rows.append(row)(:

import csv
import pandas as pd

df = pd.read_csv(r"file1.csv")
list_codes = list(df.EMP_Code)
selected_rows = []
with open(r"master_file.csv") as csv_file:
reader = csv.DictReader(csv_file)
for row in reader:
if row['EMP_Code'] in list_codes:
selected_rows.append(row)
# selected_rows.extend(df.loc[df.EMP_Code == row['EMP_Code']].to_dict('records'))
article_usage = pd.DataFrame.from_records(selected_rows)
article_usage.to_csv(r"Employee_full_data.csv", index=False)

Employee_full_data.csv:

EMP_name,EMP_age,EMP_Service,EMP_Code,EMP_dept
a,30,6,s283,abc
b,29,3,f367,xyz
d,45,10,c264,abc

最新更新