数据规整
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