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

数据规整

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 
posted @ 2023-12-15 19:17  辰令  阅读(82)  评论(0编辑  收藏  举报