按账户号拆分数据并保存至新文件/工作表及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)
额外注意事项
- 列名匹配:你的示例数据里列名是
Account-Num,但代码里用的是ACCT_NO,请确保代码里的列名和Excel文件中的实际列名完全一致(大小写、符号都要匹配),否则会筛选不到数据。 - 空数据处理:如果某个账户没有匹配到数据,
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
相关产品推荐
相关产品推荐

