Python 使用字典中的正则表达式从事务列创建类别列
我有一个csv文件,其中包含作为数据框导入的银行信息。我想创建一个包含交易类别(例如收入、费用、转账)的新列,该列是从包含正则表达式的字典创建的,以应用于交易描述 比如说,Python 使用字典中的正则表达式从事务列创建类别列,python,regex,dictionary,pandas,Python,Regex,Dictionary,Pandas,我有一个csv文件,其中包含作为数据框导入的银行信息。我想创建一个包含交易类别(例如收入、费用、转账)的新列,该列是从包含正则表达式的字典创建的,以应用于交易描述 比如说, import pandas as pd import re data = pd.read_csv("data/transactions.csv", parse_dates=['Date']) 以下是数据数据帧的输出: Date Description Amount 201
import pandas as pd
import re
data = pd.read_csv("data/transactions.csv", parse_dates=['Date'])
以下是数据
数据帧的输出:
Date Description Amount
2016-01-01 checkcard good food -12.45
2016-01-02 visa peppy lube -30.34
2016-01-05 deposit bank of me 5000.00
2016-01-05 transfer to bank 2500.00
2016-01-10 gift from aunt sally 25.00
以下是正则表达式:
income = re.compile('.*deposit|gift.*')
expense = re.compile('good food|.*peppy lube.*')
transfer = re.compile('.*transfer.*')
这是字典:
catdict = {income: 'income',
expense: 'expense',
transfer: 'transfer'}
我需要创建名为Category
的新列的代码,该列使用正则表达式将字典的值分配给Description
列与其中一个正则表达式匹配的行,因此结果将是:
Date Description Amount Category
2016-01-01 checkcard good food -12.45 expense
2016-01-02 visa peppy lube -30.34 expense
2016-01-05 deposit bank of me 5000.00 income
2016-01-05 transfer to bank 2500.00 transfer
2016-01-10 gift from aunt sally 25.00 income
理想情况下,对于正则表达式中找不到匹配项的行,此代码还将在“类别”列中插入“协调”
我是python新手,我怀疑我缺少一种python式的方法来实现这一点
提前感谢您可以定义一个函数,根据您的
正则表达式将字符串(描述)映射到类别。第一次匹配模式时,函数返回该类别的名称。如果没有匹配项,则返回“协调”
from collections import OrderedDict
def category(s):
catdict = OrderedDict([(income, 'income'),
(expense, 'expense'),
(transfer, 'transfer'),
])
for ptn, name in catdict.iteritems():
if ptn.search(s):
return name
return 'RECONCILE'
然后您可以将此函数应用于“描述”列
data['Category'] = data.Description.map(category)
print data
这会给你你想要的 对于重叠的类别,应如何处理?例如,sally阿姨送的礼物(优惠券)可以和她一起去这里吃饭吗?问得好。也许可以通过将最高优先级的类别放在字典的第一位来构建优先级排序?不幸的是,dict
没有排序。您需要OrderedDict
来完成此操作。