如何从每月更新的CSV中选中倒数第二列获取当月净收入?
QuickBooks P&L报表自动化:动态获取当月净收入解决方案
一、直接选取倒数第二列的实现方式
如果确认最后一列固定是Total,可以通过以下两种方式快速获取倒数第二列的第一行值(即当月净收入):
- 通过索引直接选取倒数第二列
利用iloc按位置索引,[:, -2]表示选取所有行的倒数第二列,再取第一行数据:
# 获取倒数第二列的第一行值 current_net_income = df.iloc[:, -2][0]
- 排除Total列后取最后一列
如果担心未来Total列位置变动,先移除Total列,再取剩余列的最后一列,逻辑更清晰:
# 先删除Total列,再取最后一列的第一行值 current_net_income = df.drop('Total', axis=1).iloc[:, -1][0]
二、这种依赖列位置的方式是否妥当?
直接依赖列位置(倒数第二)存在风险:如果后续QuickBooks导出的CSV新增了其他汇总列(比如季度汇总、同比列),列的相对位置会改变,导致取值错误。
更稳健的替代方案:基于月份名称匹配
QuickBooks导出的P&L报表中,月份列会明确标注月份名称(如Nov/December),可以通过动态匹配当前月份的列名来获取数据,完全脱离列位置的限制:
import datetime import pandas as pd # 读取CSV到DataFrame(示例用你提供的测试数据) d = {'Jan': [50], 'Feb': [70], 'Total':[120]} df = pd.DataFrame(data=d) # 获取当前月份的缩写(如'Nov'),如果CSV是全称则用'%B' current_month = datetime.datetime.now().strftime('%b') # 匹配列名获取当月净收入 if current_month in df.columns: current_net_income = df[current_month][0] else: # 处理当月数据未更新的情况 current_net_income = None print(f"未找到{current_month}列数据")
这种方式的优势在于:无论CSV的列如何增减、排序如何变化,只要月份列名正确,就能精准获取对应数据,适配长期的报表自动化需求。
内容的提问来源于stack exchange,提问作者sisyphus
相关产品推荐
相关产品推荐

