-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathclassifier.py
More file actions
69 lines (59 loc) · 2.28 KB
/
Copy pathclassifier.py
File metadata and controls
69 lines (59 loc) · 2.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import numpy as np # to cleanse data
import os
class classifier:
def __init__(self, basePath):
self.basePath = basePath
self.categories = self.get_categories()
def get_categories(self):
categories = {}
category_directory = os.fsdecode(self.basePath)
for file in os.listdir(category_directory):
filename = os.fsdecode(file)
with open(category_directory + "/" + file, "r") as infile:
for line in infile:
categories[line.strip()] = filename.replace(".txt", "").title()
return categories
def manual_classify(self, df):
return df
def classify(self, df):
if df.empty:
return
df["Category"] = np.nan
for key, value in self.categories.items():
df["Category"] = np.where(
df["Name"].str.contains(key, case=False, regex=False),
value,
df["Category"],
)
e_transfer_in_cond = (
df["Name"].str.contains("e-transfer", case=False, regex=False)
) & (df["Amount"] > 0)
df.loc[e_transfer_in_cond, "Category"] = "Transfer In"
e_transfer_out_cond = (
df["Name"].str.contains("e-transfer", case=False, regex=False)
) & (df["Amount"] < 0)
df.loc[e_transfer_out_cond, "Category"] = "Transfer Out"
electronic_funds_in_cond = (
(
df["Name"].str.contains(
"electronic funds transfer", case=False, regex=False
)
)
& (df["Amount"] > 0)
& ~(df["Name"].str.contains("pay", case=False, regex=False))
)
df.loc[electronic_funds_in_cond, "Category"] = "Transfer In"
electronic_funds_out_cond = (
df["Name"].str.contains(
"electronic funds transfer", case=False, regex=False
)
) & (df["Amount"] < 0)
df.loc[electronic_funds_out_cond, "Category"] = "Transfer Out"
df["Category"] = np.where(
df["Category"].str.contains("nan", case=False, regex=False),
self.manual_classify(
df["Category"]
), # How to run a function on every row in a pandas df?
df["Category"],
)
return df