python实现Excel多行多列的转换的示例
短信预约 -IT技能 免费直播动态提醒
前言
使用pandas对Excel的多行和多列进行转换
提示:以下是本篇文章正文内容,下面案例可供参考
一、使用需求
将上表中的多行多列数据转换成下表中的三列多行数据,需要做的就是将同一日期不同坐标的值汇总到一列数据。核心思想就是新建一列然后把原来的一行多列数据汇总成一列多行数据。不同日期的值汇总到一起,即完成多行多列的转换。
二、使用步骤
1.引入库
import pandas as pd
2.读入数据
df = pd.read_excel('源数据.xlsx')
3.将需要合并的列的列名先放在列表中
merge_list = list(df.loc[:, '75.951142 39.473421':].columns)#这里是坐标,是日期右边的列名,可以根据自己的表格改。
4.填充空值为0
df.loc[:, '75.951142 39.473421':] = df.loc[:, '75.951142 39.473421':].fillna(0)
5.添加新列,把待合并的所有列变成一个大字符串(传入函数处理)
# 定义函数来处理合并操作
def merge_values(s):
# 每2列进行合并分隔符为|,2列与2列合并分割符为#,即 监测值和坐标
result = []
for idx in range(0, len(s.values), 2): # len(s.values)即df.loc[:,'学科':]的每一行的长度 ,第三个字段2为步长2即2个合并
result.append(f'{s[idx]}|{merge_list[idx]}') # 生成一个列表,格式为数值和坐标,这里merge_list[idx]是后面添加的坐标列
return '#'.join(result) # 将列表用#号分割返回一个大字符串 格式为:检测值和坐标
# 添加新列,把待合并的所有列变成一个大字符串(传入函数处理)
df['merge'] = df.loc[:, '75.951142 39.473421':].apply(merge_values, axis=1)
6.删除合并之前的列,保存id,name,merge列
df.drop(merge_list,axis=1,inplace=True)
7. 使用explode来变成多列
df['75.951142 39.473421'] = df['merge'].str.split('|').str[0]df['坐标'] = df['merge'].str.split('|').str[1]#这里添加新的坐标列df.drop(['merge'],axis=1,inplace=True)df['75.951142 39.473421'] = df['merge'].str.split('|').str[0]
df['坐标'] = df['merge'].str.split('|').str[1]#这里添加新的坐标列
df.drop(['merge'],axis=1,inplace=True)
8.存储到本地生成新的csv文件
df.to_excel('转换后数据.xlsx', index=False)
总结
以上就是今天要讲的内容,本文仅仅简单介绍了多行多列数据之间的转换的一个小案例,主要是利用pandas来解决。
到此这篇关于python实现Excel多行多列的转换的示例的文章就介绍到这了,更多相关python Excel多行多列转换内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341