zoukankan      html  css  js  c++  java
  • 处理 pandas数据中 批量创建多列并写入excel的 case

    背景:得到账单数据,需要对其进行处理,针对其中一个列进行字符拆分并生成新列:

    需要在 列 L、M、N...对费用明细这一列拆分:如下图所示

    思路如下
    第一步:对费用明细这一列 先取出字符,然后用正则取出 费用明目,即我们要创建新列的 columns;
    第二步:因为最后生成的dateframe ,字典是可以生成dateframe,所以拿到第一步的 {费用明目:费用} 以后 字典。对于全 费用明细 ,部分行为缺失项,需要填充为0,完整代码中会有技术细节描述;
    第三步:第二步生成的dateframe 最后如何与原始的账单 进行结合在一起?刚开始思路是:循环操作:针对每一行 每一列逐个单元格 进行赋值;第二种思路是:将第二步生成的dateframe一起合并新的dateframe 然后与原始账单进行连接 concat操作;

    总结:第三步最后采用 第二种思路,大批量的赋值操作效率低。

    import pandas as pd
    import re
    from functools import reduce
    data = pd.read_excel('/Users/xujingfei/Library/Containers/com.microsoft.Excel/Data/Downloads/zuixin/fee.xlsx')
    i = 0
    title = ['起步价','超里程价','企业保险','随车人身意外保险','搬运费','停车费','高速路桥费','小费','额外搬运费','逾时等候费','拉拉券','等候费','规格','搬运费税费']
    dict_fyi = {k:0.00 for k in title}  # 字典推导式
    list_df = []
    for i,j in zip(data.index,[4]*1536):
        fee = data.iloc[i,j]
        key = list(filter(None,re.split(r'¥-*\d+\.\d+|\n',fee)))   #用数字split会产生空字符串,使用filter筛选 
        # [ i for i in re.split(r'¥-*\d+\.\d+|\n',fee) if len(i) != 0] 等同上面写法,map以及filter已经逐渐被列表推导式所替代;
        value = re.findall(r'-*\d+\.\d+',fee)
        dict_fee = dict(zip(key,value))  
        df = dict(dict_fyi,**dict_fee)  # 进行字典合并,相同key ,第二个会覆盖掉第一个的value
        df_t = pd.DataFrame(df,index=[i]) 
        list_df.append(df_t)  # 将每一行生成的字典 ,放入字典中
    df_end = reduce(lambda x,y:pd.concat([x,y],axis=0),list_df)  # 解决方案:使用reduce进行迭代拼接,就不存在temp dataframe的存在了。
    k = pd.concat([data,df_end],axis=1)  #第三步思路,汇总所有的dateframe 与原始dateframe 连接
    k.to_excel('22.xlsx')
    
  • 相关阅读:
    LeetCode 842. Split Array into Fibonacci Sequence
    LeetCode 1087. Brace Expansion
    LeetCode 1219. Path with Maximum Gold
    LeetCode 1079. Letter Tile Possibilities
    LeetCode 1049. Last Stone Weight II
    LeetCode 1046. Last Stone Weight
    LeetCode 1139. Largest 1-Bordered Square
    LeetCode 764. Largest Plus Sign
    LeetCode 1105. Filling Bookcase Shelves
    LeetCode 1027. Longest Arithmetic Sequence
  • 原文地址:https://www.cnblogs.com/ivan09/p/15707944.html
Copyright © 2011-2022 走看看