首页 > 编程语言 >Python_数据规整_宽表变长表-melt

Python_数据规整_宽表变长表-melt

时间:2023-12-15 19:22:05浏览次数:24  
标签:宽表变 Python excel melt df data day row

数据规整

melt:英文融化、溶解
    melt函数 的主要作用是将DataFrame从宽格式转换成长格式  columns to values
  melt函数是把宽表转变为长表,
pivot:英文旋转,以...为中心旋转
  'pivot函数把长表转换成宽表 column values to index, to column, to value
    两者经常用于数据的长宽表转换、数据的规整,与Excel的数据透视功能类似

excel 行转列

 数字转字符  
    添加单引号
    使用文本函数 TEXT

apply的两种使用方式

不带参数

def join_columns(row):
    return str(row['A']) + '-' + str(row['B'])

df['C'] = df.apply(join_columns, axis=1)
print(df)

带参数

# 定义处理每一行的函数
def process_row(row, a, b):
    return row['A'] + row['B'] + a + b

# 对每一行执行 process_row 函数,并将参数传递给 args 参数中
df['C'] = df.apply(process_row, axis=1, args=(2, 3))
 args 时,请确保按照正确的顺传递所有参数
df['C'] = df.apply(lambda row: process_row(row, a=2, b=3), axis=1) 

apply函数

  axis=0表示沿着0轴方向切片即按列切片,axis=1表示沿着1轴方向切片即按行切片

列名处理

 宽表变长表
import pandas as pd
import os

if __name__ =="__main__":
    excel_dir = r"D:\grade_class\input_excel"
    json_nm = r"202211_day_detail.xlsx"
    excel_file_nm = os.path.join(excel_dir, json_nm)
    excel_data = pd.read_excel(io=excel_file_nm, sheet_name='Sheet1')
    ## NaN 填充为""
    excel_data = excel_data.fillna("")
    print(excel_data.head(10))
    data_info = ['11.01','11.02','11.03','11.04','11.07','11.08','11.09','11.10' ]
    data_ls = ["班级"]
    ## 相同列名合并为一个
    # #print(excel_data.columns)
    for sig_data_day in data_info:
        excel_data["2022."+sig_data_day] = (excel_data[sig_data_day].replace('\n',' ', regex=True)  +
                                            excel_data[sig_data_day+".1"]).replace('\n',' ', regex=True)
        data_ls.append("2022."+sig_data_day)
    subset_df = excel_data[data_ls]
    ## 宽表变为长表
    temp = subset_df.melt(id_vars='班级', value_vars=data_ls)
    result_df = temp.sort_values(by=['班级',"variable"])
    print(result_df.head(50))
    result_df.columns =["班级","日期","工作内容"]
    out_file = r'D:\grade_class\input_excel\out\filename_12.csv'
    result_df.to_csv(out_file, index=False)
	
	info =pd.merge(deal_data, excel_data, how = 'left',  left_on = ["班级","日期"], right_on  = ["班级","周末"])

参考

 https://www.cnblogs.com/ytwang/p/16249723.html 

标签:宽表变,Python,excel,melt,df,data,day,row
From: https://www.cnblogs.com/ytwang/p/17904049.html

相关文章

  • 【python基础之迭代器】 --- 迭代器
    title:【python基础之迭代器】---迭代器date:2023-12-1318:54:06updated:2023-12-1519:10:00description:【python基础之迭代器】---迭代器cover:https://home.cnblogs.com/u/dream-ze/【一】迭代器介绍迭代器,即用来迭代取值的工具,而迭代是重复反......
  • # yyds干货盘点 # 盘点一个Python正则表达式的问题
    大家好,我是皮皮。一、前言前几天在Python最强王者交流群【崔艳飞】问了一个Python正则表达式的问题,一起来看看吧。问题如下:'/H/H_OMC*/Mo/20231128/share',各位大神,引号内的*通配符,咋让起作用?加个引号,不灵了。二、实现过程这里【哎呦喂 是豆子~】、【莫生气】给了一个指导,比方说加......
  • python初试二
    连接数据库Django为多种数据库后台提供了统一的调用API。根据需求不同,Django可以选择不同的数据库后台。MySQL算是最常用的数据库。我们这里将Django和MySQL连接。在Linux终端下启动mysql:$mysql-uroot-p在MySQL中创立Django项目的数据库:mysql>CREATEDATABASEvillaDEFAULT......
  • Python多线程编程:竞争问题的解析与应对策略
    本文将深入探讨Python多线程编程中可能出现的竞争问题、问题根源以及解决策略,旨在帮助读者更好地理解、应对并发编程中的挑战。多线程竞争问题的复杂性源自于对共享资源的并发访问和操作。在不同线程间的交叉执行中,共享资源可能因无序访问而导致数据不一致、死锁或饥饿等问题。解决......
  • 【创意、创造】用 Python pandas做一个读取Excel,再写入新的Excel小工具
    Python很好很强大,1.5天时间,简化很多重复的劳动,哈哈~ importpandasaspdimportdatetimeasdtdefhandleFrontEnd():#处理【上周前端发版】开始sheet_front_end=pd.read_excel('D:\某前端原文件.xlsx',sheet_name='Sh......
  • python flask 生产环境部署,基于gunicorn
    1.安装gunicorn,部分生产服务器会存在多个pip版本,一般用pip和pip3区分,本文中用pippipinstallgunicorn2.启动程序cd/usr/appgunicorn--workers2-b0.0.0.0:5056app:app 验证项目正常后继续如下操作3.配置gunicorn配置文件查看centos版本cat/etc/redhat-releas......
  • python3 操作csv
    https://blog.csdn.net/m0_46483236/article/details/109583685 1.python中创建新的csv文件(1).使用csv.writer()创建:代码如下:importcsvheaders=['学号','姓名','分数']rows=[('202001','张三','98'),('20200......
  • python_控制台输出带颜色的文字方法
    在python开发的过程中,经常会遇到需要打印各种信息。海量的信息堆砌在控制台中,就会导致信息都混在一起,降低了重要信息的可读性。这时候,如果能给重要的信息加上字体颜色,那么就会更加方便用户阅读了。当然了,控制台的展示效果有限,并不能像前段一样炫酷,只能做一些简单的设置......
  • python之chardet操作 编码&解码
    #python之编码&解码"""python中有两种类型,字符串和字节但是字节的编码是什么我们不知道,所以解码不好解决,chardet解决了这个问题pipinstallchardet"""#字节--->字符串importchardettemp_bytes=b'helloword'temp_str=temp_bytes.decode("utf8")print(f&quo......
  • Python 异步编程之yield关键字
    背景介绍在前面的篇章中介绍了同步和异步在IO上的对比,从本篇开始探究python中异步的实现方法和原理。python协程的发展流程:python2.5为生成器引用.send()、.throw()、.close()方法python3.3为引入yieldfrom,可以接收返回值,可以使用yieldfrom定义协程Python3.4加入了asy......