场景是统计总公司分子公司下的收入情况,表格如下
讯享网
| 公司名称 | 支付宝 | 微信 | 银联 | 其他 | 备注 |
| 小明有限公司 | 10 | 0 | 30 | 0 | 砸锅卖铁 |
| 小强有限公司 | 0 | 20 | 0 | 10 | 换不锈钢盆 |
只做一个导出功能,我修改记录表中数据对原有值无影响,所有我只在mysql数据库中建了一张record表,用来记录子公司有收入,收入类别具体值没有专门建表来存储,只能通过汇总信息得来,查询之后,对于单个公司返回的数据接口如下
讯享网min_data = [{"INCOME_NUM": 10, "INCOME_NAME": "支付宝"},{"INCOME_NUM": 30, "INCOME_NAME": "银联"}]
将其转化为dataframe格式
import pandas as pd read_data = pd.DataFrame(min_data)
具体数据格式如下:
| INCOME_NUM | INCOME_NAME | |
| 0 | 10 | 支付宝 |
| 1 | 30 | 银联 |
需要进行一步操作将INCOME_NAME的值变为列名,进行两步操作
首先进行转置
讯享网read_data = read_data.T read_data = read_data.reset_index(drop=True)
具体数据格式如下:
| 0 | 1 | |
| 0 | 10 | 30 |
| 1 | 支付宝 | 微信 |
再利用numpy取出列值赋值就可以给columns即可
import numpy as np read_data_array = np.array(read_data)
具体数据格式为
讯享网[[10 30] ['支付宝' '微信']]
进行赋值操作
read_list = read_data_array.tolist() r_list = read_list[1] read_data.columns = r_list read_data.drop([1], inplace=True)
得到我们想要的数据格式
| 支付宝 | 微信 | |
| 0 | 10 | 30 |
我们还有一个存放公司信息的dataframe
讯享网company_data = pd.DataFrame([{"公司名称": "小明有限公司", "备注":"砸锅卖铁"}]) 利用创建一个merge_word的字段利用merge就可以合并为一条完整的数据 company_data['merge_word'] = 1 read_data['merge_word'] = 1 readData = pd.merge(company_data, read_data, how='left', left_on='merge_word', right_on='merge_word') readData = readData.drop('merge_word', axis=1)
最终数据格式如下
| 公司名称 | 支付宝 | 微信 | 备注 |
| 小明有限公司 | 10 | 30 | 砸锅卖铁 |
存在多条这样的数据将其放一个列表,利用concat就可以合并
rm_data = [] rm_data.append(read_data) writeData = pd.concat(rm_data).reset_index(drop=True)
进行如下操作就可以将公司名称列放在第一排,备注列放在最后一排
讯享网#将备注放在最后一列 comment = writeData['备注'] writeData.pop('备注') writeData = writeData.fillna(0) writeData.insert(writeData.shape[1], '备注', comment) #将公司名称放在第一列 company_name = writeData['公司名称'] writeData.pop('公司名称') writeData.insert(0, '公司名称', company_name)
下面就是写入环节,不在赘述,简单放代码
import xlwt excelBook = xlwt.Workbook(encoding='utf-8') excelFileName = "company_data" excelSheetName = "2022-06" excelSheet = excelBook.add_sheet(excelSheetName, cell_overwrite_ok=True) row_count = writeData.shape[1] column_count = len(writeData) #取列名赋值给单元格 columns_name = list(writeData.columns.values) for i in range(len(columns_name)): excelSheet.write(0, i, columns_name[i]) #往表中写入数值 nRow = 0 for i in range(column_count): nRow += 1 row = writeData.loc[i] for j in range(len(row)): excelSheet.write(nRow, j, row[j]) nginx_url = "..../" + excelFileName excelBook.save(nginx_url.encode('utf-8'))
pandas简直太强了,作为理论物理系的学生,当初为啥不好好学啊

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/75267.html