You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按账户号拆分数据并保存至新文件/工作表及AttributeError报错解决

按账户号拆分数据并修复代码报错问题

先解决你的代码报错问题

你遇到的 AttributeError: 'function' object has no attribute 'to_csv',大概率是因为变量df2被意外覆盖成了一个函数(比如之前在交互式环境里定义过同名函数),或者你的筛选逻辑返回的对象不符合预期。

先调整你的单个账户筛选逻辑,用布尔索引替代where,这是pandas中筛选数据更直接的方式,能确保返回的是标准DataFrame对象:

import pandas as pd
soa = pd.read_excel('ubl.xlsx')
acc = '218851993'
# 用布尔索引筛选目标账户数据,只保留匹配的行
account_df = soa[soa['ACCT_NO'] == acc]
# 保存为CSV
account_df.to_csv('C:/Users/user/Desktop/mcb/D/HBL/UBL/' + acc + '.csv', index=False)

如果还是报错,建议重启你的Python运行环境(比如Jupyter Notebook、终端),避免之前的变量缓存影响。

批量按账户号拆分并保存的完整方案

如果你的需求是自动拆分所有账户的数据并分别保存,而不是手动指定单个账户,可以用下面的代码实现:

import pandas as pd

# 读取源Excel文件
soa = pd.read_excel('ubl.xlsx')

# 获取所有唯一的账户号(确保列名和你的实际数据一致,比如你的示例数据列名是Account-Num,就改成这个)
unique_accounts = soa['ACCT_NO'].unique()

# 定义文件保存的根路径
save_root = 'C:/Users/user/Desktop/mcb/D/HBL/UBL/'

# 循环处理每个账户
for acc in unique_accounts:
    # 筛选当前账户的所有交易数据
    filtered_df = soa[soa['ACCT_NO'] == acc]
    # 保存为CSV文件,文件名用账户号命名
    filtered_df.to_csv(f"{save_root}{acc}.csv", index=False)
    # 如果需要保存为Excel文件,替换成下面的代码:
    # filtered_df.to_excel(f"{save_root}{acc}.xlsx", index=False)

额外注意事项

  1. 列名匹配:你的示例数据里列名是Account-Num,但代码里用的是ACCT_NO,请确保代码里的列名和Excel文件中的实际列名完全一致(大小写、符号都要匹配),否则会筛选不到数据。
  2. 空数据处理:如果某个账户没有匹配到数据,filtered_df会是空的DataFrame,这时候保存的文件会只有表头,你可以根据需要添加判断,比如:
    if not filtered_df.empty:
        filtered_df.to_csv(f"{save_root}{acc}.csv", index=False)
    else:
        print(f"账户{acc}没有匹配的数据")
    

内容的提问来源于stack exchange,提问作者Husnain Iqbal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 14:52:53