pandas自动化实战小任务1--对excel表格分 供应商 付款年月 进行汇总(涉及根据即有相同也有不同的index的表格合并)公司的数据

说明:

由于是公司的数据,所以对供应商进行映射处理,
数据下载连接(免费):数据下载

导包

import numpy as np
import pandas as pd

from datetime import datetime
from pandas import DataFrame

读取数据

data = pd.read_csv('./data.csv', index_col=0)

《pandas自动化实战小任务1--对excel表格分 供应商 付款年月 进行汇总(涉及根据即有相同也有不同的index的表格合并)公司的数据》

月份处理(例如:2020年12月)

处理函数

# 时间转化
# 时间转化
def month(v):
    if isinstance(v, datetime):
        return str(v.year) + '年' + str(v.month) + '月'
    
    # 日期格式有可能为: 2020/12/7
    elif '/' in str(v):
        s = v.split('/')
        return str(s[0]) + '年' + str(s[1]) + '月'
    
    # 日期格式有可能为: 2020-9-7
    elif '-' in str(v):
        s = v.split('-')
        return str(s[0]) + '年' + str(s[1]) + '月'
    
    elif isinstance(v, str) or isinstance(v, int) or isinstance(v, float):
        return np.nan

    else:
        return v

映射

for i,j in zip(['定金付款月份', '尾款付款月份', '赊账付款月份' ,'运费付款月份'], 
               ['定金付款时间', '尾款付款时间', '赊账付款时间' ,'运费付款时间']):
    data[i] = data[j].map(month)

根据供应商和月份分组分别进行聚合,

因为付款的月份没统一,所以对四个款项分别聚合求和

moneies = []
for i,j in zip(['定金', '尾款', '赊账', '运费'], ['定金付款月份', '尾款付款月份', '赊账付款月份', '运费付款月份']):
    
    temp = DataFrame(money.loc[:,['供应商', i, j]].dropna())
    # 去除,非数字的行
    temp['condition'] = temp[i].map(lambda v:True if isinstance(v, int) or isinstance(v,float) else False)
    temp = temp[temp.condition]
    temp.drop(columns='condition', inplace=True)
    
    temp = DataFrame(temp.groupby(['供应商', j]).sum())
    temp.rename(index={ '供应商':i+'供应商'}, inplace=True)
    moneies.append(temp)

《pandas自动化实战小任务1--对excel表格分 供应商 付款年月 进行汇总(涉及根据即有相同也有不同的index的表格合并)公司的数据》

汇总,

看不懂的请点击:方法9,字典拆分

dic = { **moneies[0].to_dict(), **moneies[1].to_dict(), 
       **moneies[2].to_dict(), **moneies[3].to_dict()}
total = DataFrame(dic)

《pandas自动化实战小任务1--对excel表格分 供应商 付款年月 进行汇总(涉及根据即有相同也有不同的index的表格合并)公司的数据》

数据处理,并生成汇总

# 处理函数
def munber(v):
    try:
        v = float(v)
        return v
    except ValueError as e:
        return 0
    return 0
total.fillna(0, inplace=True)
# 去除数字之外的数据
for col in total.columns:
    total[col] = total[col].map(lambda v:v if isinstance(v,float) or isinstance(v,int) else 0)

total.eval("汇总 = 定金+尾款+赊账+运费", inplace=True)
# 去除数字之外的数据
for col in total.columns:
    total[col] = total[col].map(munber)

total.eval("汇总 = 定金+尾款+赊账+运费", inplace=True)

《pandas自动化实战小任务1--对excel表格分 供应商 付款年月 进行汇总(涉及根据即有相同也有不同的index的表格合并)公司的数据》

    原文作者:网球小伙子
    原文地址: https://blog.csdn.net/RogerFedereYY/article/details/111936951
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞