如何将文本文件中的目标字符串转换为指定表头的DataFrame?
将账单字符串转换为指定结构的DataFrame
实现步骤与代码
直接通过字符串预处理、正则提取字段,再用pandas生成目标结构的DataFrame,具体代码如下:
import pandas as pd import re # 原始账单字符串 raw_str = "'Statement of Account,09 OCT AMAZON PRIME 38.87,09 OCT FP*FOOD CART 37.09,20 SEP MTHLY CASHBACK - VISA PAYW 5.96 CR'" # 预处理:移除首尾引号,按逗号分割后跳过第一个标题项 transactions = raw_str.strip("'").split(',')[1:] # 定义正则匹配规则,精准提取每笔交易的四个字段 pattern = re.compile(r'^(\d{2} [A-Z]{3}) (.*?) (\d+\.\d{2})(?: (CR))?$') # 遍历提取每笔交易的字段信息 processed_data = [] for item in transactions: match_result = pattern.match(item.strip()) if match_result: # 日期转成首字母大写格式(如OCT→Oct) date = match_result.group(1).title() # 交易描述 desc = match_result.group(2) # 金额转数值类型 amount = float(match_result.group(3)) # 备注为空时填充空字符串 remark = match_result.group(4) if match_result.group(4) else "" processed_data.append([date, desc, amount, remark]) # 生成指定表头的DataFrame result_df = pd.DataFrame(processed_data, columns=['日期', '描述', '金额', '备注']) print(result_df)
代码说明
- 字符串预处理:先去掉字符串首尾的单引号,用逗号分割后,第一个元素是账单标题,直接跳过,剩下的就是每笔交易的原始内容。
- 正则匹配逻辑:
(\d{2} [A-Z]{3}):提取两位日期+三位大写月份缩写(比如09 OCT)(.*?):非贪婪匹配中间的交易描述,避免把金额部分误包含进来(\d+\.\d{2}):提取带两位小数的金额数字(?: (CR))?:可选匹配末尾的备注标识(如CR),没有则返回空值
- 字段整理:把日期格式统一为首字母大写,金额转为数值类型方便后续计算,最后将所有字段整理成二维列表。
- 生成DataFrame:用pandas将整理好的数据转换成DataFrame,指定对应的中文表头即可。
运行后得到的结果结构如下:
| 日期 | 描述 | 金额 | 备注 |
|---|---|---|---|
| 09 Oct | AMAZON PRIME | 38.87 | |
| 09 Oct | FP*FOOD CART | 37.09 | |
| 20 Sep | MTHLY CASHBACK - VISA PAYW | 5.96 | CR |
内容的提问来源于stack exchange,提问作者snow
相关产品推荐
相关产品推荐

