You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pandas处理不规则结构Excel文件的数据规整问题

不规则Excel数据规整:搞定House字段处理

问题背景

原始Excel只有First、Last、Unnamed三列,数据混着人员信息、房屋属性(House/Time/Zip)和数值,而且这种乱结构还重复出现。目标是整理成包含First、Last、House、Time、Zip的规范表格。你已经用循环处理了Time字段,现在卡在House字段上,提前建好了Time和Zip列,现有代码如下:

for index, row in df.iterrows():
    if row['Last'] == 'Time':
        currentZip = df.loc[index, 'Unnamed']
        df.loc[index, 'Unnamed'] = ''
        df.loc[index-2, 'Time'] = currentZip

解决方案

从你处理Time的逻辑能看出规律:把Last='Time'行的Unnamed值,填充到它往上数第2行的Time列里。House字段可以照搬这个逻辑——当Last='House'时,Unnamed里的房屋信息对应填充到它上数第2行的House列。

方法1:直接扩展现有循环(小数据集适用)

如果数据量不大,直接在现有循环里加House的处理逻辑就行,改动很小:

for index, row in df.iterrows():
    # 原有的Time处理逻辑
    if row['Last'] == 'Time':
        currentZip = df.loc[index, 'Unnamed']
        df.loc[index, 'Unnamed'] = ''
        df.loc[index-2, 'Time'] = currentZip
    # 新增House处理逻辑
    if row['Last'] == 'House':
        currentHouse = df.loc[index, 'Unnamed']
        df.loc[index, 'Unnamed'] = ''
        df.loc[index-2, 'House'] = currentHouse

方法2:用Pandas向量化操作(大数据集效率更高)

iterrows效率极低,数据量大时会拖慢速度,换成Pandas的布尔索引和移位操作更高效:

# 处理Time字段
time_rows = df['Last'] == 'Time'
# 把Time行的Unnamed值,填充到它前两行的Time列
df.loc[time_rows.shift(-2).fillna(False), 'Time'] = df.loc[time_rows, 'Unnamed'].values
# 清空Time行的Unnamed内容
df.loc[time_rows, 'Unnamed'] = ''

# 处理House字段,逻辑和Time完全一致
house_rows = df['Last'] == 'House'
df.loc[house_rows.shift(-2).fillna(False), 'House'] = df.loc[house_rows, 'Unnamed'].values
df.loc[house_rows, 'Unnamed'] = ''

最后一步:清理无效行

处理完所有属性后,把那些用来标识属性的行(Last是House/Time/Zip的行)删掉,只保留人员信息行:

# 过滤掉属性标识行,重置索引
clean_df = df[~df['Last'].isin(['House', 'Time', 'Zip'])].reset_index(drop=True)

内容的提问来源于stack exchange,提问作者Willy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 20:52:33