如何用Pandas筛选CSV银行流水关键词并汇总对应消费总金额
解决方法
你已经完成了模糊匹配筛选行的核心步骤,后续不需要手动遍历行,直接调用Pandas内置的求和方法即可实现需求,修改后完整代码如下:
import pandas as pd keyword = input("Enter the keyword you wish to search in the statement: ") # 读取无表头的银行流水CSV df = pd.read_csv('accountactivity.csv', header=None) # 模糊匹配交易名称包含关键词的行,不区分大小写,空值默认不匹配 dff = df.loc[df[1].str.contains(keyword, case=False, na=False)] if not dff.empty: # 将支出金额转为数值类型后求和,异常值自动忽略 total_sum = pd.to_numeric(dff[2], errors='coerce').sum() # 输出所有匹配到的交易名称 for trade_name in dff[1]: print(trade_name) print(f"The sum for expenses at {keyword} is of: {total_sum}$") else: print("Keyword returned no results.")
关键修改说明
- 新增
na=False参数:避免交易名称列存在空值时,str.contains方法抛出异常,空值会统一判定为不匹配关键词 - 新增
pd.to_numeric转换:防止CSV读取的金额为字符串格式无法求和,errors='coerce'配置会自动把无法转换为数值的异常内容转为空值,求和时自动忽略 - 直接调用
sum()方法:不需要手动循环遍历每一行累加,Pandas内置的向量化运算效率远高于手动循环,数据量越大优势越明显
这个实现完全满足子串模糊匹配、不区分大小写的需求,输入netflix可以正常匹配到NETFLIX.COM _V这类内容。
内容的提问来源于stack exchange,提问作者TheGoodTheBadTheUgly
相关产品推荐
相关产品推荐

