Pandas处理和转置excel数据

之前帮同事处理的excel文件,因为表头是重复向右延伸,导致有很多列其实含义一致,但又不方便存储;为了方便将该excel的数据直接入库,此处需要将excel中进行处理,删除不必要的标题行、转置excel的行列等等

文件结构示例:

处理前:

组织时间1时间2......
人数表头1表头2......人数表头1表头2............

处理后:

组织时间人数表头1表头2......
时间1
时间2
...

代码如下,仅供参考:

import pandas


def xls_cont(path):
    # 获取第一个sheet
    sheet = pandas.read_excel(path, dtype='str', header=None)
    return sheet


if __name__ == '__main__':

    # 定义文件变量
    filepath = 'D:/上报模板(原).xlsx'
    aim_path = 'D:/上报模板.xlsx'
    sheet = xls_cont(filepath)

    # 获取行数列数
    rows = sheet.shape[0]
    cols = sheet.shape[1]

    # 确定数据起始行列(此处用“人员身份”确定数据的起始位置)
    for r in range(0, rows):
        for c in range(0, cols):
            if sheet.values[r, c] == '人员身份':
                start_row = r
                start_col = c
                break

    # 获取左侧固定列
    new_col = ['人员身份', '人员类别', '大类', '一级组织', '二级组织', '三级组织', '细分人员类别', '费用类别', '指标分类',
               '人数', '表头1', '表头2', '表头3', '表头4', '表头5', '表头6', '表头7', '合计1', '合计2']
    for c in range(start_col, cols):
        if sheet.values[start_row, c] == new_col[0]:
            c_dazao = c
        elif sheet.values[start_row, c] == new_col[1]:
            c_leibie = c
        elif sheet.values[start_row, c] == new_col[2]:
            c_dalei = c
        elif sheet.values[start_row, c] == new_col[3]:
            c_zuzhi1 = c
        elif sheet.values[start_row, c] == new_col[4]:
            c_zuzhi2 = c
        elif sheet.values[start_row, c] == new_col[5]:
            c_zuzhi3 = c
        elif sheet.values[start_row, c] == new_col[6]:
            c_xifen = c
        elif sheet.values[start_row, c] == new_col[7]:
            c_feiyong = c

    # 以人数为基准,找右侧数据列(列数有规律才这么弄)
    c_renshu = []
    for c in range(start_col, cols):
        if sheet.values[start_row + 1, c] == '人数':
            c_renshu.append(c)

    # 开始获取并梳理数据结构
    new_list = []
    for i_renshu in c_renshu:
        for i_r in range(start_row + 2, rows):
            xifen = str(sheet.values[i_r, c_xifen])
            if xifen != '' and xifen != 'nan':
                i_new_list = [sheet.values[i_r, c_dazao], sheet.values[i_r, c_leibie], sheet.values[i_r, c_dalei],
                              sheet.values[i_r, c_zuzhi1], sheet.values[i_r, c_zuzhi2], sheet.values[i_r, c_zuzhi3],
                              sheet.values[i_r, c_xifen], sheet.values[i_r, c_feiyong],
                              sheet.values[start_row, i_renshu],
                              sheet.values[i_r, i_renshu], sheet.values[i_r, i_renshu + 1],
                              sheet.values[i_r, i_renshu + 2], sheet.values[i_r, i_renshu + 3],
                              sheet.values[i_r, i_renshu + 4], sheet.values[i_r, i_renshu + 5],
                              sheet.values[i_r, i_renshu + 6], sheet.values[i_r, i_renshu + 7],
                              sheet.values[i_r, i_renshu + 8], sheet.values[i_r, i_renshu + 9]]
                new_list.append(i_new_list)

    # 数据放入DataFrame
    new_sheet = pandas.DataFrame(new_list, columns=new_col)
    print(new_sheet)

    # 保存文件
    new_sheet.to_excel(aim_path)

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Python中使用Pandas库进行DataFrame对象的可以通过使用T属性来实现。T属性可以将DataFrame的行和列进行交换,从而实现操作。 下面是一个示例代码来演示如何使用Pandas进行操作: ```python import pandas as pd # 创建一个DataFrame对象 data = {'A': [1, 2, 3], 'B': [4, 5, 6]} df = pd.DataFrame(data) # DataFrame对象 df_transposed = df.T # 打印后的结果 print(df_transposed) ``` 这段代码创建了一个DataFrame对象,然后通过使用T属性将其进行,并将后的结果存储在一个新的DataFrame对象df_transposed中。最后,我们使用print语句打印出后的结果。 希望这个示例能够帮助你理解在Python中使用Pandas进行操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Python-Pandas-DataFrame对象(交换行列)](https://blog.csdn.net/biggolden1/article/details/127708327)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Python pandas.DataFrame 找出有空值的行](https://download.csdn.net/download/weixin_38565480/13782454)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Pandas处理excel数据](https://blog.csdn.net/wang1qqqq/article/details/127261922)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值