我有 2 個檔案,file1.csv 和一個名為 master_file.csv 的大型 csv。它們有幾個列,并有一個名為 EMP_Code 的通用列名。
檔案 1 示例:
| EMP_name | EMP_代碼 | EMP_部門 |
|---|---|---|
| 一個 | s283 | 美國廣播公司 |
| b | f367 | xyz |
| d | c264 | 美國廣播公司 |
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 中的所有 EMP_Code 值從 master_file 中提取類似的行。我嘗試了以下代碼并收到錯誤。我無法讀取完整的主 csv 檔案,因為它大約 20gb,有十萬行并且記憶體不足。我想分塊讀取 master_file 并提取 file1 中存在的每個 EMP_Code 的完整行并將其保存到新檔案 Employee_full_data 中。
import pandas as pd
import numpy as np
import os
from pandas import DataFrame
df = pd.read_csv(r"file1.csv")
df_items = pd.read_csv(r"master_file.csv", names=['EMP_Code'], iterator=True, chunksize=10000)
article_usage = df.loc[df['EMP_Code'] .isin(df_items['EMP_Code'])]
article_usage.to_csv(r"Employee_full_data.csv")
TypeError Traceback (most recent call last)
/tmp/ipykernel_117278/3252874549.py in <module>
6 df = pd.read_csv(r"file1.csv")
7 df_items = pd.read_csv(r"master_file.csv", names=['EMP_Code'], iterator=True, chunksize=10000)
----> 8 article_usage = df.loc[df['EMP_Code'] .isin(df_items['EMP_Code'])]
9 article_usage.to_csv(r"Employee_full_data.csv")
TypeError: 'TextFileReader' object is not subscriptable
uj5u.com熱心網友回復:
一種解決方案是使用內置csv庫來更好地處理記憶體。盡管它可以防止記憶體不足的問題,但由于使用 for 回圈逐一掃描行,可能需要一些時間才能完成。
假設這兩個示例檔案:
檔案 1.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
您可以使用以下代碼片段(selected_rows.append(row)如果您想保留 file1 的記錄而不是 master_file 的記錄,請使用注釋行):
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/520947.html
上一篇:在awk的幾列上運行數學
