为了使我们的预算工作更加轻松并帮助自己学习;我正在用python创建一个小程序,该程序从我们的导出银行csv中获取数据。
我将举例说明我要如何处理这些数据。假设我想将所有快餐费用归为一类。 “描述”列中有许多名称不同且总数不同的名称,但我希望将它们全部列为一项“快餐”费用。
例如,Csv的设置如下:
Date Description Debit Credit
1/20/20 POS PIN BLAH BLAH ### 1.75 NaN
我想出了如何用or语句对它们进行分组:
contains = df.loc[df['Description'].str.contains('food court|whataburger', flags = re.I, regex = True)]
我最终希望从列表中读取它?我想将所有费用归类,并检查那些类别变量名称,以便仅从该列表中输出。
我尝试过类似的事情:
fast_food = ['Macdonald', 'Whataburger', 'pizza hut']
那显然是行不通的。
如果有更好的方法可以这样做,我欢迎您提出建议。
此外,我在堆栈中浏览了很多文章,但尚未找到答案(尽管我确定我忽略了它)
任何帮助将不胜感激。我还在学习。
谢谢
答案 0 :(得分:1)
使用动态模式构建:
\b
re.escape
单词边界找到整个单词,而不是部分单词。
\b
将保护特殊字符,它们将被解析为文字字符。
如果public class Document
{
public string Id { get; set; }
}
对您不起作用,请通过Match a whole word in a string using dynamic regex检查其他方法
答案 1 :(得分:1)
您可以先使用str.extract
然后再使用groupby
分配新列:
df = pd.DataFrame({"description":['Macdonald something', 'Whataburger something', 'pizza hut something',
'Whataburger something','Macdonald something','Macdonald otherthing',],
"debit":[1.75,2.0,3.5,4.5,1.5,2.0]})
fast_food = ['Macdonald', 'Whataburger', 'pizza hut']
df["found"] = df["description"].str.extract(f'({"|".join(fast_food)})',flags=re.I)
print (df.groupby("found").sum())
#
debit
found
Macdonald 5.25
Whataburger 6.50
pizza hut 3.50