如何在Python DataFrame中按条件插入行并调整列数据?
大型数据文件整理:套房号与城市/州拆分方案(Excel VBA入门版)
核心需求拆解
- 在D列右侧新增E、F列,分别存储
Suite #和City/State - 仅无套房号的条目需要插入行,将对应城市/州数据移至F列对应位置
- 已有套房号的条目直接映射到E列
判断条件思路(替代单纯字符串长度)
别依赖字符串长度判断,套房号、城市州的长度可能波动,更靠谱的是基于内容特征判断:
- 套房号特征:包含
Suite关键词、#符号,或格式为Suite 123/#456 - 城市/州特征:包含逗号(如
Los Angeles, CA)、带有2位州缩写(如CA、NY),且不包含套房号相关关键词
入门级VBA代码实现
Sub OrganizeData() ' 1. 新增E、F列并设置表头 Columns("E:F").Insert Shift:=xlToRight Range("E1").Value = "Suite #" Range("F1").Value = "City/State" ' 2. 获取D列最后一行数据行号 Dim lastRow As Long lastRow = Cells(Rows.Count, "D").End(xlUp).Row ' 3. 从最后一行往上循环(避免插入行打乱循环索引) For i = lastRow To 2 Step -1 Dim currentCell As Range Set currentCell = Cells(i, "D") ' 判断当前单元格是城市/州(无套房号,需插入行) If InStr(currentCell.Value, ",") > 0 And InStr(currentCell.Value, "Suite") = 0 Then ' 插入一行到当前行上方 Rows(i).Insert Shift:=xlDown ' 将城市/州数据移到F列新行 Cells(i, "F").Value = currentCell.Value ' 清空原D列单元格 currentCell.ClearContents ' 判断当前单元格是套房号 ElseIf InStr(currentCell.Value, "Suite") > 0 Or InStr(currentCell.Value, "#") > 0 Then ' 将套房号移到E列对应行 Cells(i, "E").Value = currentCell.Value currentCell.ClearContents End If Next i End Sub
代码调整与测试提示
- 适配数据格式:如果套房号用
STE代替Suite,把InStr(currentCell.Value, "Suite")改成InStr(currentCell.Value, "STE")即可 - 先备份数据:运行代码前务必复制原始文件,避免数据丢失
- 小范围测试:先取前10行数据,把代码里的
lastRow改成10,验证判断逻辑是否准确 - 打开开发工具:如果看不到Excel的「开发工具」,在「文件-选项-自定义功能区」勾选该选项,插入模块后粘贴代码
内容的提问来源于stack exchange,提问作者Michael J.
相关产品推荐
相关产品推荐

