Python操作Excel实战:Excel行转列

1、原始数据准备

样例数据准备

|-----|-----|-------|--------|---------|---------|----|----|------|-------|-------|
| 地区 | 1m³ | 2-5m³ | 6-10m³ | 11-20m³ | 21-40m³ | 地区 | 单价 | 计费单位 | 费用最小值 | 费用最大值 |
| 北京 | 130 | 120 | 110 | 100 | 90 |   |   |   |   |   |
| 天津 | 130 | 120 | 110 | 100 | 90 |   |   |   |   |   |
| 石家庄 | 130 | 120 | 110 | 100 | 90 |   |   |   |   |   |
| 保定 | 140 | 130 | 120 | 110 | 100 |   |   |   |   |   |
| 张家口 | 170 | 150 | 130 | 120 | 110 |   |   |   |   |   |
| 邢台 | 140 | 120 | 110 | 100 | 90 |   |   |   |   |   |
| 邯郸 | 140 | 130 | 120 | 110 | 100 |   |   |   |   |   |
| 衡水 | 140 | 130 | 120 | 110 | 100 |   |   |   |   |   |
| 沧州 | 130 | 120 | 110 | 100 | 90 |   |   |   |   |   |
| 廊坊 | 150 | 130 | 120 | 100 | 90 |   |   |   |   |   |
| 唐山 | 130 | 120 | 110 | 100 | 90 |   |   |   |   |   |
| 秦皇岛 | 140 | 130 | 120 | 100 | 90 |   |   |   |   |   |
| 承德 | 170 | 150 | 130 | 120 | 110 |   |   |   |   |   |

#2、python脚本编写,新建app.py文件,内容如下:

python 复制代码
import pandas as pd
import numpy as np


# 读取原始 Excel 文件
df = pd.read_excel('shanghaiTrailerFee.xlsx')

print(df.head())

# 选择第二行开始的数据,并每行复制 5 次
df_copy = pd.DataFrame(np.repeat(df.iloc[0:, :].values, 5, axis=0), columns=df.columns)

print('************************')

# print(df_copy.shape[0])

# print(df_copy.head())

totalRow = df_copy.shape[0]
print("总计行数为",totalRow)
for i in range(totalRow):
    
   if i % 5 == 0 :
       df_copy.values[i][6] = df_copy.values[i][0]
       df_copy.values[i][7] = df_copy.values[i][1]
       df_copy.values[i][8] = 'CBM'
       df_copy.values[i][9] = 0
       df_copy.values[i][10] = 1
   if i % 5 == 1 :
       df_copy.values[i][6] = df_copy.values[i][0]
       df_copy.values[i][7] = df_copy.values[i][2]
       df_copy.values[i][8] = 'CBM'
       df_copy.values[i][9] = 2
       df_copy.values[i][10] = 5
   if i % 5 == 2 :
       df_copy.values[i][6] = df_copy.values[i][0]
       df_copy.values[i][7] = df_copy.values[i][3]
       df_copy.values[i][8] = 'CBM'
       df_copy.values[i][9] = 6
       df_copy.values[i][10] = 10
   if i % 5 == 3 :
       df_copy.values[i][6] = df_copy.values[i][0]
       df_copy.values[i][7] = df_copy.values[i][4]
       df_copy.values[i][8] = 'CBM'
       df_copy.values[i][9] = 11
       df_copy.values[i][10] = 20
   if i % 5 == 4 :
       df_copy.values[i][6] = df_copy.values[i][0]
       df_copy.values[i][7] = df_copy.values[i][5]
       df_copy.values[i][8] = 'CBM'
       df_copy.values[i][9] = 21
       df_copy.values[i][10] = 40
        

df_copy.drop(df_copy.columns[[0,1,2,3,4,5]], axis=1, inplace=True)   
    

# 将处理后的数据保存到新的Excel文件中
df_copy.to_excel('new_shanghaiTrailerFee.xlsx', index=False)

3、执行python app.py

4、效果展示

|-----|-----|------|-------|-------|
| 地区 | 单价 | 计费单位 | 费用最小值 | 费用最大值 |
| 北京 | 130 | CBM | 0 | 1 |
| 北京 | 120 | CBM | 2 | 5 |
| 北京 | 110 | CBM | 6 | 10 |
| 北京 | 100 | CBM | 11 | 20 |
| 北京 | 90 | CBM | 21 | 40 |
| 天津 | 130 | CBM | 0 | 1 |
| 天津 | 120 | CBM | 2 | 5 |
| 天津 | 110 | CBM | 6 | 10 |
| 天津 | 100 | CBM | 11 | 20 |
| 天津 | 90 | CBM | 21 | 40 |
| 石家庄 | 130 | CBM | 0 | 1 |
| 石家庄 | 120 | CBM | 2 | 5 |
| 石家庄 | 110 | CBM | 6 | 10 |
| 石家庄 | 100 | CBM | 11 | 20 |
| 石家庄 | 90 | CBM | 21 | 40 |
| 保定 | 140 | CBM | 0 | 1 |
| 保定 | 130 | CBM | 2 | 5 |
| 保定 | 120 | CBM | 6 | 10 |
| 保定 | 110 | CBM | 11 | 20 |
| 保定 | 100 | CBM | 21 | 40 |
| 张家口 | 170 | CBM | 0 | 1 |
| 张家口 | 150 | CBM | 2 | 5 |
| 张家口 | 130 | CBM | 6 | 10 |
| 张家口 | 120 | CBM | 11 | 20 |
| 张家口 | 110 | CBM | 21 | 40 |
| 邢台 | 140 | CBM | 0 | 1 |
| 邢台 | 120 | CBM | 2 | 5 |
| 邢台 | 110 | CBM | 6 | 10 |
| 邢台 | 100 | CBM | 11 | 20 |
| 邢台 | 90 | CBM | 21 | 40 |
| 邯郸 | 140 | CBM | 0 | 1 |
| 邯郸 | 130 | CBM | 2 | 5 |
| 邯郸 | 120 | CBM | 6 | 10 |
| 邯郸 | 110 | CBM | 11 | 20 |
| 邯郸 | 100 | CBM | 21 | 40 |
| 衡水 | 140 | CBM | 0 | 1 |
| 衡水 | 130 | CBM | 2 | 5 |
| 衡水 | 120 | CBM | 6 | 10 |
| 衡水 | 110 | CBM | 11 | 20 |
| 衡水 | 100 | CBM | 21 | 40 |
| 沧州 | 130 | CBM | 0 | 1 |
| 沧州 | 120 | CBM | 2 | 5 |
| 沧州 | 110 | CBM | 6 | 10 |
| 沧州 | 100 | CBM | 11 | 20 |
| 沧州 | 90 | CBM | 21 | 40 |
| 廊坊 | 150 | CBM | 0 | 1 |
| 廊坊 | 130 | CBM | 2 | 5 |
| 廊坊 | 120 | CBM | 6 | 10 |
| 廊坊 | 100 | CBM | 11 | 20 |
| 廊坊 | 90 | CBM | 21 | 40 |
| 唐山 | 130 | CBM | 0 | 1 |
| 唐山 | 120 | CBM | 2 | 5 |
| 唐山 | 110 | CBM | 6 | 10 |
| 唐山 | 100 | CBM | 11 | 20 |
| 唐山 | 90 | CBM | 21 | 40 |
| 秦皇岛 | 140 | CBM | 0 | 1 |
| 秦皇岛 | 130 | CBM | 2 | 5 |
| 秦皇岛 | 120 | CBM | 6 | 10 |
| 秦皇岛 | 100 | CBM | 11 | 20 |
| 秦皇岛 | 90 | CBM | 21 | 40 |
| 承德 | 170 | CBM | 0 | 1 |
| 承德 | 150 | CBM | 2 | 5 |
| 承德 | 130 | CBM | 6 | 10 |
| 承德 | 120 | CBM | 11 | 20 |
| 承德 | 110 | CBM | 21 | 40 |

相关推荐
步行cgn6 分钟前
AOP 通知的类型详解
开发语言
weixin_307779139 分钟前
从“人操作仪器”到“Agent 自主发现”:OPL 金属材料自驱动实验室 MVP 技术论述
开发语言·人工智能·算法·架构
梦想画家21 分钟前
SQLMesh Python 模型入门(二):依赖管理、引擎实战与内存优化
数据库·python·sqlmesh
笑鸿的学习笔记41 分钟前
C++笔记之SIMD与SSE指令集
开发语言·c++·笔记
全栈练习生1 小时前
大模型原理之 KV Cache
python·ai
福兮说1 小时前
URL 编码的七个坑:c++ 传到后端变空格、%25 套娃、截断 emoji 直接报错
开发语言·前端·javascript·node.js·url
天赐范式1 小时前
天赐范式第183天:让选择开始生效——育种者方程与选择生效条件
python·数字生命·天赐范式·动态运行时·育种者方程·选择压力·遗传力
小的时候可菜了1 小时前
JS 异步的本质:从单线程到 thenable(一条进化链)
开发语言·前端·javascript
可乐鸡翅yeah_2 小时前
hls.js 配置 loadStartPosition,点播起始播放位置踩坑
开发语言·javascript·网络协议·ecmascript·m3u8在线
benchmark_cc2 小时前
批量行情返回后,怎样把请求失败的股票和正常数据分开?
python·数据分析·pandas·量化交易·股票数据·quantdash