# %%
import numpy as np
import pandas as pd
# %%
# 1.一列转为多列,str.split,已确定拆分结果的列数
df = pd.read_excel('./data/demo_05.xlsx', sheet_name='Sheet1')
tb = df['收货地址'].str.split(' ', expand=True)
df['省份'] = tb[0]
df['城市'] = tb[1]
# pd.Series.str.split()
df
# %%
# 2.一列转为多列,不确定拆分结果的列数,split和join方法
df = pd.read_excel('./data/demo_05.xlsx', sheet_name='Sheet2')
df_split = df['商品信息'].str.split(',', expand=True)
df_re = df.join(df_split)
df_re
# %%
# 3.对元素/列表形式的字段拆分
df = pd.DataFrame({
'订单ID': [1, 2, 3, 4],
'数量和价格': [[1, 2],
[3, 4],
[5, 6],
[7, 8]]})
df[['数量', '价格']] = df['数量和价格'].apply(pd.Series)
df
# %%
# 4.行列转换
# %%
# 4.1列转为行,stack,将除索引列之外的字段转为最内层的行索引
df = pd.read_excel('./data/demo_05.xlsx', sheet_name='Sheet3')
df = df.set_index('门店')
df = df.stack().reset_index()
df.columns = ['门店', '产品', '销量']
df
# %%
# 4.1行转为列,unstack,将最内层的行索引转为字段
df = pd.read_excel('./data/demo_05.xlsx', sheet_name='Sheet4')
df = df.set_index(['门店', '品类'])
df = df.unstack()
df
# %%
# 转为常规DataFrame
df.columns = df.columns.droplevel(0)
df.columns.names = [None]
df = df.reset_index()
df
# %%
# 4.3行转为列,pivot,透视列,没有聚合功能
df = pd.read_excel('./data/demo_05.xlsx', sheet_name='Sheet5')
df = df.pivot(index='门店', columns='品类', values='销量')
df.columns.names = [None]
df.reset_index()
# %%
# 4.4列转为行,melt,宽表转为长表
df = pd.read_excel('./data/demo_05.xlsx', sheet_name='Sheet3')
df.melt(
# 位置保持不变的字段
id_vars='门店',
# 转为行的字段
value_vars=['手机销量', '电脑销量'],
# 转为行后新字段的别名
var_name='品类',
# 值列的别名
value_name='销量')
# %%
# 5.DataFrame转为字典
df = pd.read_excel('./data/demo_05.xlsx', sheet_name='Sheet6')
# 先设置索引,作为字典的key
df = df.set_index('用户ID')
dct = df.to_dict()['用户姓名']
dct
# %%
# 6.DataFrame转为列表
df = pd.read_excel('./data/demo_05.xlsx', sheet_name='Sheet6')
lst = df.values.tolist()
lst
# %%
# 7.DataFrame转为元组
df = pd.read_excel('./data/demo_05.xlsx', sheet_name='Sheet6')
# 元组
# tuple()
tup = [tuple(x) for x in df.values]
# 生成器
# (tuple(x) for x in df.values)
# %%
# 8.DataFrame转HTML
df = pd.read_excel('./data/demo_05.xlsx', sheet_name='Sheet6')
df.to_html('网页.html', index=False)
# %%