python错乱数据处理实战案例

客户需求,需要把Excel中sheet1中的数据,处理成sheet2的显示效果
在这里插入图片描述
最终需要的效果

在这里插入图片描述
解决代码和详细注释如下:

import pandas as pd

# 读取Excel文件中的数据,不指定表头,所有数据按原始顺序读取
df = pd.read_excel('新建 XLS 工作表.xlsx', sheet_name='Sheet1', header=None)

# 初始化一个空的DataFrame,用于存储处理后的数据,包含指定的列
result = pd.DataFrame(columns=['姓名', '年龄', '科目', '成绩', '班级', '爱好', '特长'])

# 初始化一个空字典,用于存储当前处理的人的信息
current_person = {}
# 遍历Excel数据的每一列
for col in df.columns:
    # 遍历每一列中的每一行数据,忽略空值
    for row in df[col].dropna():
        # 如果行中包含冒号,表示该行是“键:值”的形式
        if ':' in row:
            key, value = row.split(':')
            # 如果键是“姓名”,表示开始记录一个新人的信息
            if key == '姓名':
                # 如果字典中已有上一个人的数据,先将其添加到结果DataFrame中
                if current_person:
                    result = result.append(current_person, ignore_index=True)
                    # 重置当前人信息字典
                    current_person = {}
                # 记录当前人的姓名
                current_person['姓名'] = value
            else:
                # 记录其他键值对信息
                current_person[key] = value
        # 处理行以“爱好”开头的情况,提取爱好信息
        elif row.startswith('爱好'):
            current_person['爱好'] = row.split(':')[1]
        # 处理行以“特长”开头的情况,提取特长信息
        elif row.startswith('特长'):
            current_person['特长'] = row.split(':')[1]

# 在循环结束后,如果仍有未添加的数据,将最后一个人的数据添加到结果DataFrame中
if current_person:
    result = result.append(current_person, ignore_index=True)

# 定义一个严格的姓名顺序列表,用于排序结果
name_order = ["甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "子", "丑", "寅", "卯", "辰"]

# 创建一个新的DataFrame,根据指定的姓名顺序填充数据
ordered_result = pd.DataFrame(columns=['姓名', '年龄', '科目', '成绩', '班级', '爱好', '特长'])

# 遍历指定的姓名顺序列表
for name in name_order:
    # 查找result DataFrame中对应的人的数据
    person_data = result[result['姓名'] == name]
    # 如果找到对应人的数据,将其添加到新的DataFrame中
    if not person_data.empty:
        ordered_result = ordered_result.append(person_data.iloc[0], ignore_index=True)

# 将新的DataFrame中所有缺失值填充为空字符串
ordered_result = ordered_result.fillna('')

# 打印最终排序后的结果DataFrame,取消索引列的显示
print(ordered_result.to_string(index=False))

# 如果需要保存处理后的结果为Excel文件,可以取消下面代码的注释并执行
# ordered_result.to_excel('处理后的数据.xlsx', index=False)

今天的分享就到这里了。有收获的小伙伴,记得点赞、收藏、分享哦!

如果您对本次分享的内容感兴趣的话,记得关注关注哦!不然下次找不到喽!
关注不迷路哦!

“好记性不如烂笔头”,IT小本本 —— 记录IT知识,分享打工人真实的日常操作笔记!!!
😝有需要的小伙伴,可以V扫描下方二维码免费关注哦!

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值