同事正在为怎样处理一个18万行的全年财务Excel文件发愁,文件足足有30M,打开文件也要两三分钟,于是他就向我求助。大概意思就是要筛选出Data工作簿“源数据”Sheet中所有收款人对应的付款人及付款笔数、金额小计,于是我简化做了一个表格,只有4个涉及到的列,随机数据200行用于测试。其实我也没好好学过pandas库的用法,只能边写代码边查库函数方法的帮助。
读者想测试的话把以下表格建一个Data.xlsx文件,放入工作表sheet改名为“源数据”:
序号 | 付款人 | 收款人 | 摘要 | 金额 |
1 | Fondue Fred | Chris M. | 利息收入 | 659023.50 |
2 | Fondue Fred | cat u. | 奖金 | 686397.39 |
3 | Peppermint Grill | Erin C. | 利息收入 | 547630.80 |
4 | Viengvilay Thai Cuisine | Ronyde R. | 工资 | 729166.04 |
5 | Happy Valley | Steven C. | 利息收入 | 237085.82 |
6 | Pancho's | Elise B. | 午餐补助 | 445978.71 |
7 | Jasmine Thai | Kelly J. | 58789.61 | |
8 | Fondue Fred | Chris M. | 奖金 | 269656.77 |
9 | Peppermint Grill | cat u. | 电话费 | 461892.01 |
10 | Viengvilay Thai Cuisine | Erin C. | 利息收入 | 898460.26 |
11 | Happy Valley | Ronyde R. | 午餐补助 | 253800.23 |
12 | Pancho's | Steven C. | 369248.58 | |
13 | Peking Express | Elise B. | 午餐补助 | 909461.19 |
14 | Pho K & K | Kelly J. | 奖金 | 636912.13 |
15 | Momo Masala | Kreaky B. | 午餐补助 | 294433.29 |
16 | Happy Valley | Charles L. | 利息收入 | 98425.93 |
17 | Free Speech Movement Cafe | SV B. | 绩效奖 | 385952.70 |
18 | Sun Hong Kong Restaurant | Emmanuel K. | 电话费 | 298993.76 |
19 | Tivoli Caffe | Hayne P. | 奖金 | 362271.41 |
20 | Fondue Fred | Chester R. | 奖金 | 929680.70 |
21 | Pho K & K | Frank E. | 电话费 | 443264.47 |
22 | Momo Masala | ian B. | 利息收入 | 590357.56 |
23 | La Cascada Taqueria | Anand J. | 绩效奖 | 120278.90 |
24 | Free Speech Movement Cafe | Michelle C. | 电话费 | 363154.49 |
25 | Sun Hong Kong Restaurant | Connie L. | 奖金 | 772297.01 |
26 | Fondue Fred | Chester R. | 绩效奖 | 56434.60 |
27 | Jasmine Thai | Frank E. | 午餐补助 | 676935.11 |
28 | Fondue Fred | ian B. | 绩效奖 | 47426.88 |
29 | Peppermint Grill | Anand J. | 工资 | 26559.22 |
30 | Pancho's | Michelle C. | 午餐补助 | 829193.46 |
31 | Happy Valley | Connie L. | 午餐补助 | 790252.39 |
32 | Fondue Fred | Chris M. | 奖金 | 789003.64 |
33 | Peppermint Grill | cat u. | 工资 | 745933.99 |
34 | Viengvilay Thai Cuisine | Erin C. | 工资 | 236399.23 |
35 | Happy Valley | Ronyde R. | 电话费 | 586514.28 |
36 | Pancho's | Steven C. | 电话费 | 704429.85 |
37 | Peking Express | Elise B. | 利息收入 | 706649.53 |
38 | Pho K & K | Kelly J. | 利息收入 | 798905.40 |
39 | Pancho's | Kreaky B. | 午餐补助 | 123342.41 |
40 | Pancho's | Charles L. | 利息收入 | 684495.80 |
41 | Fondue Fred | SV B. | 工资 | 759880.77 |
42 | Peppermint Grill | Emmanuel K. | 奖金 | 164258.96 |
43 | Viengvilay Thai Cuisine | Chris M. | 午餐补助 | 450074.73 |
44 | Happy Valley | cat u. | 工资 | 732141.47 |
45 | Pancho's | Erin C. | 工资 | 382335.59 |
46 | Peking Express | Ronyde R. | 电话费 | 52157.74 |
47 | Pho K & K | Steven C. | 奖金 | 86584.79 |
48 | Pancho's | Elise B. | 工资 | 743686.70 |
49 | La Cascada Taqueria | Kelly J. | 利息收入 | 397502.25 |
50 | Free Speech Movement Cafe | Kreaky B. | 奖金 | 396860.39 |
51 | Fondue Fred | Chris M. | 利息收入 | 825482.56 |
52 | Fondue Fred | cat u. | 绩效奖 | 397166.24 |
53 | Jasmine Thai | Erin C. | 利息收入 | 116214.97 |
54 | Fondue Fred | Ronyde R. | 利息收入 | 478843.26 |
55 | Peppermint Grill | Steven C. | 绩效奖 | 607805.07 |
56 | Peking Express | Elise B. | 电话费 | 839463.59 |
57 | Happy Valley | Kelly J. | 绩效奖 | 552333.25 |
58 | Pancho's | Kreaky B. | 奖金 | 264649.21 |
59 | Pancho's | Charles L. | 工资 | 804044.64 |
60 | Pho K & K | SV B. | 电话费 | 188521.05 |
61 | Momo Masala | Emmanuel K. | 绩效奖 | 548395.28 |
62 | La Cascada Taqueria | Hayne P. | 电话费 | 320491.57 |
63 | Pancho's | Chester R. | 电话费 | 564264.20 |
64 | Jasmine Thai | Frank E. | 电话费 | 26548.08 |
65 | Fondue Fred | ian B. | 绩效奖 | 561130.01 |
66 | Peppermint Grill | Anand J. | 利息收入 | 310639.75 |
67 | Viengvilay Thai Cuisine | Michelle C. | 午餐补助 | 126372.01 |
68 | Happy Valley | Connie L. | 午餐补助 | 283743.91 |
69 | Pancho's | Charles L. | 利息收入 | 466645.47 |
70 | Peking Express | SV B. | 利息收入 | 790773.30 |
71 | Pho K & K | Emmanuel K. | 午餐补助 | 332421.10 |
72 | Momo Masala | Hayne P. | 电话费 | 304884.58 |
73 | La Cascada Taqueria | Chester R. | 午餐补助 | 478597.45 |
74 | Free Speech Movement Cafe | Frank E. | 电话费 | 38349.75 |
75 | Sun Hong Kong Restaurant | ian B. | 午餐补助 | 708450.80 |
76 | Jasmine Thai | Anand J. | 利息收入 | 352943.26 |
77 | Fondue Fred | Michelle C. | 电话费 | 84445.31 |
78 | Sun Hong Kong Restaurant | Connie L. | 利息收入 | 446377.36 |
79 | Viengvilay Thai Cuisine | Chris M. | 午餐补助 | 487447.24 |
80 | Happy Valley | cat u. | 工资 | 621560.18 |
81 | Pancho's | Erin C. | 绩效奖 | 738774.54 |
82 | Jasmine Thai | Ronyde R. | 午餐补助 | 878550.80 |
83 | Jasmine Thai | Steven C. | 工资 | 606650.62 |
84 | Pancho's | Elise B. | 利息收入 | 652152.47 |
85 | Peppermint Grill | Kelly J. | 绩效奖 | 49818.52 |
86 | Sun Hong Kong Restaurant | Kreaky B. | 奖金 | 553236.99 |
87 | Happy Valley | Charles L. | 奖金 | 753966.73 |
88 | Pancho's | SV B. | 奖金 | 349994.17 |
89 | Jasmine Thai | Emmanuel K. | 午餐补助 | 369869.21 |
90 | Fondue Fred | Hayne P. | 工资 | 901013.93 |
91 | Pancho's | Chester R. | 奖金 | 424058.34 |
92 | Viengvilay Thai Cuisine | Chris M. | 奖金 | 129926.48 |
93 | Happy Valley | cat u. | 工资 | 241263.49 |
94 | Pancho's | Erin C. | 利息收入 | 52658.55 |
95 | Peking Express | Ronyde R. | 利息收入 | 574086.39 |
96 | Pancho's | Steven C. | 奖金 | 329354.33 |
97 | Jasmine Thai | Elise B. | 电话费 | 772150.86 |
98 | Fondue Fred | Kelly J. | 绩效奖 | 778344.81 |
99 | Peppermint Grill | Kreaky B. | 工资 | 121135.05 |
100 | Happy Valley | Charles L. | 午餐补助 | 469759.67 |
101 | Happy Valley | Kreaky B. | 奖金 | 259231.87 |
102 | Pancho's | Charles L. | 利息收入 | 283332.19 |
103 | Peking Express | SV B. | 绩效奖 | 137020.38 |
104 | Pho K & K | Emmanuel K. | 绩效奖 | 17895.81 |
105 | Momo Masala | Hayne P. | 绩效奖 | 487485.09 |
106 | La Cascada Taqueria | Chester R. | 电话费 | 713075.82 |
107 | Free Speech Movement Cafe | Frank E. | 利息收入 | 516484.10 |
108 | Sun Hong Kong Restaurant | Chris M. | 绩效奖 | 388540.27 |
109 | Peppermint Grill | cat u. | 利息收入 | 821033.66 |
110 | Sun Hong Kong Restaurant | Erin C. | 电话费 | 141187.69 |
111 | Tivoli Caffe | Ronyde R. | 利息收入 | 548204.84 |
112 | Peking Express | Steven C. | 电话费 | 187591.63 |
113 | Peking Express | Elise B. | 绩效奖 | 422040.66 |
114 | Pho K & K | Kelly J. | 利息收入 | 899000.90 |
115 | Momo Masala | Kreaky B. | 奖金 | 860487.16 |
116 | Pancho's | Charles L. | 奖金 | 565460.00 |
117 | Jasmine Thai | SV B. | 电话费 | 534439.95 |
118 | Fondue Fred | Emmanuel K. | 利息收入 | 619974.15 |
119 | Sun Hong Kong Restaurant | Chris M. | 利息收入 | 274497.93 |
120 | Happy Valley | cat u. | 午餐补助 | 435219.80 |
121 | Happy Valley | Ronyde R. | 利息收入 | 845869.39 |
122 | Pancho's | Steven C. | 电话费 | 354800.67 |
123 | Peking Express | Elise B. | 电话费 | 953247.52 |
124 | Pho K & K | Kelly J. | 电话费 | 481924.05 |
125 | Momo Masala | Kreaky B. | 绩效奖 | 404013.01 |
126 | Happy Valley | Charles L. | 绩效奖 | 769668.63 |
127 | Free Speech Movement Cafe | SV B. | 利息收入 | 83031.82 |
128 | Sun Hong Kong Restaurant | Emmanuel K. | 奖金 | 631631.62 |
129 | Fondue Fred | Hayne P. | 绩效奖 | 736780.82 |
130 | Pancho's | Chester R. | 奖金 | 107541.96 |
131 | Viengvilay Thai Cuisine | Frank E. | 奖金 | 867043.05 |
132 | Happy Valley | ian B. | 利息收入 | 225032.17 |
133 | Jasmine Thai | Anand J. | 工资 | 826160.06 |
134 | Jasmine Thai | Michelle C. | 奖金 | 575971.60 |
135 | Happy Valley | Connie L. | 奖金 | 164416.13 |
136 | Jasmine Thai | Hayne P. | 奖金 | 919835.19 |
137 | Fondue Fred | Chester R. | 工资 | 554112.76 |
138 | Peppermint Grill | Frank E. | 电话费 | 370809.24 |
139 | Viengvilay Thai Cuisine | ian B. | 午餐补助 | 789340.74 |
140 | Jasmine Thai | Anand J. | 利息收入 | 982375.06 |
141 | Fondue Fred | Chris M. | 午餐补助 | 534441.78 |
142 | Fondue Fred | cat u. | 午餐补助 | 599801.16 |
143 | Pho K & K | Erin C. | 奖金 | 506099.20 |
144 | Momo Masala | Ronyde R. | 午餐补助 | 950946.03 |
145 | La Cascada Taqueria | Steven C. | 午餐补助 | 10551.28 |
146 | Free Speech Movement Cafe | Elise B. | 工资 | 229204.60 |
147 | Sun Hong Kong Restaurant | Kelly J. | 午餐补助 | 202276.01 |
148 | Fondue Fred | Kreaky B. | 奖金 | 763411.47 |
149 | Pancho's | Charles L. | 午餐补助 | 976836.74 |
150 | Viengvilay Thai Cuisine | SV B. | 午餐补助 | 496867.88 |
151 | Happy Valley | Emmanuel K. | 奖金 | 467356.72 |
152 | Pancho's | Hayne P. | 午餐补助 | 230336.90 |
153 | Pancho's | Chester R. | 奖金 | 98807.02 |
154 | Pancho's | Frank E. | 奖金 | 513703.80 |
155 | Sun Hong Kong Restaurant | Chris M. | 绩效奖 | 677359.51 |
156 | Peppermint Grill | cat u. | 奖金 | 466781.93 |
157 | Peppermint Grill | Erin C. | 奖金 | 494887.11 |
158 | Viengvilay Thai Cuisine | Ronyde R. | 绩效奖 | 176694.60 |
159 | Happy Valley | Steven C. | 电话费 | 494562.02 |
160 | Peking Express | Elise B. | 电话费 | 43667.96 |
161 | Peking Express | Kelly J. | 电话费 | 199455.64 |
162 | Pho K & K | Kreaky B. | 工资 | 930321.30 |
163 | Pancho's | Charles L. | 电话费 | 892934.57 |
164 | La Cascada Taqueria | SV B. | 绩效奖 | 945701.17 |
165 | Free Speech Movement Cafe | Emmanuel K. | 利息收入 | 791487.49 |
166 | Sun Hong Kong Restaurant | Hayne P. | 奖金 | 199182.63 |
167 | Pancho's | Chester R. | 利息收入 | 105630.46 |
168 | Jasmine Thai | Frank E. | 电话费 | 46840.53 |
169 | Fondue Fred | Chris M. | 电话费 | 75215.16 |
170 | Peppermint Grill | cat u. | 午餐补助 | 861472.27 |
171 | Viengvilay Thai Cuisine | Erin C. | 利息收入 | 941311.72 |
172 | Pancho's | Ronyde R. | 奖金 | 603782.56 |
173 | Jasmine Thai | Steven C. | 利息收入 | 223892.14 |
174 | Pancho's | Elise B. | 午餐补助 | 36541.45 |
175 | Peppermint Grill | Kelly J. | 工资 | 100469.71 |
176 | Viengvilay Thai Cuisine | Kreaky B. | 利息收入 | 972305.84 |
177 | Happy Valley | Charles L. | 电话费 | 121761.44 |
178 | Pancho's | SV B. | 奖金 | 554869.14 |
179 | Peking Express | Emmanuel K. | 午餐补助 | 743767.26 |
180 | Fondue Fred | Chris M. | 午餐补助 | 739773.58 |
181 | Peppermint Grill | cat u. | 利息收入 | 470961.71 |
182 | Fondue Fred | Chris M. | 奖金 | 914168.37 |
183 | Happy Valley | cat u. | 电话费 | 541571.45 |
184 | Sun Hong Kong Restaurant | Erin C. | 电话费 | 747813.23 |
185 | Pancho's | Ronyde R. | 工资 | 838643.84 |
186 | Jasmine Thai | Elise B. | 午餐补助 | 116906.23 |
187 | Fondue Fred | Kelly J. | 奖金 | 722424.95 |
188 | Peppermint Grill | Kreaky B. | 奖金 | 644490.34 |
189 | Pancho's | Charles L. | 午餐补助 | 569665.75 |
190 | Jasmine Thai | SV B. | 奖金 | 880038.11 |
191 | Fondue Fred | Emmanuel K. | 奖金 | 920473.88 |
192 | Fondue Fred | Chris M. | 电话费 | 845688.94 |
193 | Peppermint Grill | cat u. | 电话费 | 858955.41 |
194 | Fondue Fred | Chris M. | 绩效奖 | 938686.52 |
195 | Happy Valley | cat u. | 利息收入 | 527159.46 |
196 | Peking Express | Erin C. | 利息收入 | 954028.67 |
197 | Pho K & K | Ronyde R. | 午餐补助 | 612627.78 |
198 | Momo Masala | Steven C. | 奖金 | 543399.13 |
199 | Pancho's | Elise B. | 利息收入 | 401039.35 |
200 | La Cascada Taqueria | SV B. | 绩效奖 | 945701.17 |
程序执行后,输出的output.xlsx文件格式:
付款人 | 收款人 | 摘要 | 金额 | 笔数 | 总笔数 | 全部摘要 |
SV B. | Viengvilay Thai Cuisine | 午餐补助 | 496867.88 | 1 | 13 | 午餐补助 |
ian B. | Viengvilay Thai Cuisine | 午餐补助 | 789340.74 | 1 | 13 | 午餐补助 |
Erin C. | Viengvilay Thai Cuisine | 利息收入 | 2076171.21 | 3 | 13 | 利息收入、工资 |
Kreaky B. | Viengvilay Thai Cuisine | 利息收入 | 972305.84 | 1 | 13 | 利息收入 |
Frank E. | Viengvilay Thai Cuisine | 奖金 | 867043.05 | 1 | 13 | 奖金 |
Chris M. | Viengvilay Thai Cuisine | 午餐补助 | 1067448.45 | 3 | 13 | 奖金、午餐补助 |
Michelle C. | Viengvilay Thai Cuisine | 午餐补助 | 126372.01 | 1 | 13 | 午餐补助 |
Ronyde R. | Viengvilay Thai Cuisine | 工资 | 905860.64 | 2 | 13 | 工资、绩效奖 |
SV B. | La Cascada Taqueria | 绩效奖 | 1891402.34 | 2 | 8 | 绩效奖 |
Kelly J. | La Cascada Taqueria | 利息收入 | 397502.25 | 1 | 8 | 利息收入 |
Steven C. | La Cascada Taqueria | 午餐补助 | 10551.28 | 1 | 8 | 午餐补助 |
Hayne P. | La Cascada Taqueria | 电话费 | 320491.57 | 1 | 8 | 电话费 |
Chester R. | La Cascada Taqueria | 午餐补助 | 1191673.27 | 2 | 8 | 电话费、午餐补助 |
Anand J. | La Cascada Taqueria | 绩效奖 | 120278.9 | 1 | 8 | 绩效奖 |
SV B. | Free Speech Movement Cafe | 绩效奖 | 468984.52 | 2 | 8 | 利息收入、绩效奖 |
Kreaky B. | Free Speech Movement Cafe | 奖金 | 396860.39 | 1 | 8 | 奖金 |
Elise B. | Free Speech Movement Cafe | 工资 | 229204.6 | 1 | 8 | 工资 |
Frank E. | Free Speech Movement Cafe | 电话费 | 554833.85 | 2 | 8 | 电话费、利息收入 |
Emmanuel K. | Free Speech Movement Cafe | 利息收入 | 791487.49 | 1 | 8 | 利息收入 |
Michelle C. | Free Speech Movement Cafe | 电话费 | 363154.49 | 1 | 8 | 电话费 |
SV B. | Fondue Fred | 工资 | 759880.77 | 1 | 28 | 工资 |
ian B. | Fondue Fred | 绩效奖 | 608556.89 | 2 | 28 | 绩效奖 |
Kreaky B. | Fondue Fred | 奖金 | 763411.47 | 1 | 28 | 奖金 |
cat u. | Fondue Fred | 奖金 | 1683364.79 | 3 | 28 | 午餐补助、奖金、绩效奖 |
Hayne P. | Fondue Fred | 工资 | 1637794.75 | 2 | 28 | 工资、绩效奖 |
Emmanuel K. | Fondue Fred | 利息收入 | 1540448.03 | 2 | 28 | 利息收入、奖金 |
Chris M. | Fondue Fred | 利息收入 | 6591140.82 | 10 | 28 | 利息收入、电话费、奖金、午餐补助、绩效奖 |
Chester R. | Fondue Fred | 奖金 | 1540228.06 | 3 | 28 | 奖金、绩效奖、工资 |
Kelly J. | Fondue Fred | 绩效奖 | 1500769.76 | 2 | 28 | 奖金、绩效奖 |
Ronyde R. | Fondue Fred | 利息收入 | 478843.26 | 1 | 28 | 利息收入 |
Michelle C. | Fondue Fred | 电话费 | 84445.31 | 1 | 28 | 电话费 |
Connie L. | Sun Hong Kong Restaurant | 奖金 | 1218674.37 | 2 | 13 | 利息收入、奖金 |
ian B. | Sun Hong Kong Restaurant | 午餐补助 | 708450.8 | 1 | 13 | 午餐补助 |
Erin C. | Sun Hong Kong Restaurant | 电话费 | 889000.92 | 2 | 13 | 电话费 |
Kreaky B. | Sun Hong Kong Restaurant | 奖金 | 553236.99 | 1 | 13 | 奖金 |
Hayne P. | Sun Hong Kong Restaurant | 奖金 | 199182.63 | 1 | 13 | 奖金 |
Emmanuel K. | Sun Hong Kong Restaurant | 电话费 | 930625.38 | 2 | 13 | 电话费、奖金 |
Chris M. | Sun Hong Kong Restaurant | 绩效奖 | 1340397.71 | 3 | 13 | 利息收入、绩效奖 |
Kelly J. | Sun Hong Kong Restaurant | 午餐补助 | 202276.01 | 1 | 13 | 午餐补助 |
SV B. | Pancho's | 奖金 | 904863.31 | 2 | 34 | 奖金 |
Erin C. | Pancho's | 工资 | 1173768.68 | 3 | 34 | 利息收入、工资、绩效奖 |
Kreaky B. | Pancho's | 午餐补助 | 387991.62 | 2 | 34 | 奖金、午餐补助 |
Elise B. | Pancho's | 午餐补助 | 2279398.68 | 5 | 34 | 利息收入、工资、午餐补助 |
Charles L. | Pancho's | 利息收入 | 5243415.16 | 8 | 34 | 利息收入、电话费、工资、奖金、午餐补助 |
Chester R. | Pancho's | 电话费 | 1300301.98 | 5 | 34 | 电话费、利息收入、奖金 |
Hayne P. | Pancho's | 午餐补助 | 230336.9 | 1 | 34 | 午餐补助 |
Frank E. | Pancho's | 奖金 | 513703.8 | 1 | 34 | 奖金 |
Michelle C. | Pancho's | 午餐补助 | 829193.46 | 1 | 34 | 午餐补助 |
Steven C. | Pancho's | 空值 | 1757833.43 | 4 | 34 | 电话费、奖金、空值 |
Ronyde R. | Pancho's | 奖金 | 1442426.4 | 2 | 34 | 奖金、工资 |
ian B. | Momo Masala | 利息收入 | 590357.56 | 1 | 9 | 利息收入 |
Kreaky B. | Momo Masala | 午餐补助 | 1558933.46 | 3 | 9 | 奖金、午餐补助、绩效奖 |
Hayne P. | Momo Masala | 电话费 | 792369.67 | 2 | 9 | 电话费、绩效奖 |
Emmanuel K. | Momo Masala | 绩效奖 | 548395.28 | 1 | 9 | 绩效奖 |
Steven C. | Momo Masala | 奖金 | 543399.13 | 1 | 9 | 奖金 |
Ronyde R. | Momo Masala | 午餐补助 | 950946.03 | 1 | 9 | 午餐补助 |
Connie L. | Happy Valley | 午餐补助 | 1238412.43 | 3 | 23 | 奖金、午餐补助 |
ian B. | Happy Valley | 利息收入 | 225032.17 | 1 | 23 | 利息收入 |
Kelly J. | Happy Valley | 绩效奖 | 552333.25 | 1 | 23 | 绩效奖 |
Kreaky B. | Happy Valley | 奖金 | 259231.87 | 1 | 23 | 奖金 |
cat u. | Happy Valley | 工资 | 3098915.85 | 6 | 23 | 电话费、利息收入、工资、午餐补助 |
Charles L. | Happy Valley | 利息收入 | 2213582.4 | 5 | 23 | 利息收入、电话费、奖金、午餐补助、绩效奖 |
Emmanuel K. | Happy Valley | 奖金 | 467356.72 | 1 | 23 | 奖金 |
Steven C. | Happy Valley | 利息收入 | 731647.84 | 2 | 23 | 利息收入、电话费 |
Ronyde R. | Happy Valley | 午餐补助 | 1686183.9 | 3 | 23 | 电话费、利息收入、午餐补助 |
Anand J. | Jasmine Thai | 利息收入 | 2161478.38 | 3 | 18 | 利息收入、工资 |
SV B. | Jasmine Thai | 电话费 | 1414478.06 | 2 | 18 | 电话费、奖金 |
Erin C. | Jasmine Thai | 利息收入 | 116214.97 | 1 | 18 | 利息收入 |
Elise B. | Jasmine Thai | 电话费 | 889057.09 | 2 | 18 | 电话费、午餐补助 |
Steven C. | Jasmine Thai | 工资 | 830542.76 | 2 | 18 | 利息收入、工资 |
Hayne P. | Jasmine Thai | 奖金 | 919835.19 | 1 | 18 | 奖金 |
Emmanuel K. | Jasmine Thai | 午餐补助 | 369869.21 | 1 | 18 | 午餐补助 |
Frank E. | Jasmine Thai | 午餐补助 | 750323.72 | 3 | 18 | 电话费、午餐补助 |
Kelly J. | Jasmine Thai | 空值 | 58789.61 | 1 | 18 | 空值 |
Ronyde R. | Jasmine Thai | 午餐补助 | 878550.8 | 1 | 18 | 午餐补助 |
Michelle C. | Jasmine Thai | 奖金 | 575971.6 | 1 | 18 | 奖金 |
Hayne P. | Tivoli Caffe | 奖金 | 362271.41 | 1 | 2 | 奖金 |
Ronyde R. | Tivoli Caffe | 利息收入 | 548204.84 | 1 | 2 | 利息收入 |
SV B. | Peking Express | 利息收入 | 927793.68 | 2 | 14 | 利息收入、绩效奖 |
Erin C. | Peking Express | 利息收入 | 954028.67 | 1 | 14 | 利息收入 |
Kelly J. | Peking Express | 电话费 | 199455.64 | 1 | 14 | 电话费 |
Elise B. | Peking Express | 午餐补助 | 3874530.45 | 6 | 14 | 利息收入、电话费、午餐补助、绩效奖 |
Emmanuel K. | Peking Express | 午餐补助 | 743767.26 | 1 | 14 | 午餐补助 |
Steven C. | Peking Express | 电话费 | 187591.63 | 1 | 14 | 电话费 |
Ronyde R. | Peking Express | 电话费 | 626244.13 | 2 | 14 | 电话费、利息收入 |
SV B. | Pho K & K | 电话费 | 188521.05 | 1 | 12 | 电话费 |
Erin C. | Pho K & K | 奖金 | 506099.2 | 1 | 12 | 奖金 |
Kreaky B. | Pho K & K | 工资 | 930321.3 | 1 | 12 | 工资 |
Steven C. | Pho K & K | 奖金 | 86584.79 | 1 | 12 | 奖金 |
Emmanuel K. | Pho K & K | 午餐补助 | 350316.91 | 2 | 12 | 绩效奖、午餐补助 |
Frank E. | Pho K & K | 电话费 | 443264.47 | 1 | 12 | 电话费 |
Kelly J. | Pho K & K | 奖金 | 2816742.48 | 4 | 12 | 利息收入、奖金、电话费 |
Ronyde R. | Pho K & K | 午餐补助 | 612627.78 | 1 | 12 | 午餐补助 |
Anand J. | Peppermint Grill | 工资 | 337198.97 | 2 | 18 | 利息收入、工资 |
Erin C. | Peppermint Grill | 利息收入 | 1042517.91 | 2 | 18 | 利息收入、奖金 |
Kelly J. | Peppermint Grill | 绩效奖 | 150288.23 | 2 | 18 | 工资、绩效奖 |
Kreaky B. | Peppermint Grill | 工资 | 765625.39 | 2 | 18 | 工资、奖金 |
cat u. | Peppermint Grill | 电话费 | 4687030.98 | 7 | 18 | 电话费、利息收入、工资、奖金、午餐补助 |
Emmanuel K. | Peppermint Grill | 奖金 | 164258.96 | 1 | 18 | 奖金 |
Frank E. | Peppermint Grill | 电话费 | 370809.24 | 1 | 18 | 电话费 |
Steven C. | Peppermint Grill | 绩效奖 | 607805.07 | 1 | 18 | 绩效奖 |
源代码20行(其中有6行是测试用时的代码可以去除)如下:
import time, pandas as pd
def tprint(info): print(info); return time.time()
t1 = tprint('正在读取数据,请稍候...')
df = pd.read_excel('data.xlsx', sheet_name='源数据')
t2 = tprint('正在数据计算,请稍候...')
ls, label = [], ('付款人','收款人','摘要','金额','笔数','总笔数','全部摘要')
for 收款人 in df.收款人.unique():
付款人 = df[df.收款人==收款人].付款人
总笔数 = 付款人.shape[0]
for 付款人 in 付款人.unique():
数集 = df[(df.收款人==收款人) & (df.付款人==付款人)].fillna('空值')
笔数, 金额 = 数集.shape[0], 数集.金额.sum().round(2)
摘要,全部摘要 = 数集.摘要.iloc()[0], "、".join(数集.摘要.unique())
ls.append('~'.join(map(str,(eval(_) for _ in label))).split("~"))
data = pd.DataFrame(ls, columns=label).sort_values(by='收款人')
data.金额, data.笔数, data.总笔数 = data.金额.astype('float'),data.笔数.astype('int'),data.总笔数.astype('int')
t3 = tprint('正在写入文件,请稍候...')
data.to_excel('output1.xlsx', sheet_name='Sheet1',index=False)
t4 = time.time()
print(f'读取耗时:{t2-t1:.3f}s\n计算耗时:{t3-t2:.3f}s\n写入耗时:{t4-t3:.3f}s\n共计耗时:{t4-t1:.3f}s')
测试效果:
正在读取数据,请稍候...
正在数据计算,请稍候...
正在写入文件,请稍候...
读取耗时:0.859s
计算耗时:0.314s
写入耗时:0.063s
共计耗时:1.236s
处理那个30M的文件时,因为列名一样,都不用改代码。实测读取用了58秒,计算用1600秒,共计用时28分钟左右,完美完成筛选任务。
边学边写的代码,可能就根本没用到pandas的精华所在。但也谈谈代码中几个注意点:
1. python 支持中文名变量,直接用列名作变量有好处,省得注释以及想很多变量名称来命名。
2. DataFrame筛选条件的逻辑运算用 & | ,其运算级别高于“大于”“小于”“等于”等,所以括号不能省。如代码中的: df[(df.收款人==收款人) & (df.付款人==付款人)]
3. 取DataFrame的列,可以用 df['收款人'] 也能用 df.收款人,我觉得用后者更方便点。
4. 源数据“摘要”列中有空单元格,读入DataFrame中后其值为nan,这个起先没注意到代码一直报错。后查询到df有.fillna()方法可以替换掉空值。
5. 求行数可以直接用len(df)求,也可用df.shape()方法返回一个元组:(行数、列数)。
6. 行数据我用了一句代码 '~'.join(map(str,(eval(_) for _ in label))).split("~") 合并后分割成列表。意思是从元组中取数eval转成变量,再把当层循环的变量值转字符型合并最后分割,字符“~”任意取其它字符来替代,但不能在数据中出现过否则分割列数不正常。
7. 数值类型的列都要用.astype()转回相应的数值类型,否则得到的.xlsx文件中数值列都是文本型数字(Excel中表现为单元格左上角有绿色小三角),不便于统计合计数。如:
data.金额 = data.金额.astype('float')
data.笔数 = data.笔数.astype('int')
8. df.unique()是去重方法,相当于用set()给列表去重;df.sort_values(by='',acending=True)是排序方法,升序或降序scending=True表示升序,ascending=False表示降序,默认为升序。
(本文完)
附pandas学习图一张: