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

如何使用Python按Name列类型整理CSV行并解决列匹配问题

问题说明

当前CSV文件包含多行列数据,覆盖多种监控类型、监控项与名称字段,需要保留所有列的全量数据,仅按Name列的类型完成分组排序。
现存问题:C列存储的网站名称下方附带位置信息,存在行错位问题,导致C列数据无法和A列、B列的行数据对应匹配。
CSV当前结构示例
问题效果示例

解决思路
  • 遍历行时缓存A列(类型)、B列(监控项)的最新有效值,遇到空值行直接复用缓存值补全
  • 基于关键词规则区分C列内容是有效网站名称,还是网站所属的位置附属信息,缓存最新的有效网站名称
  • 所有错位的附属行自动补全对应关联的类型、监控项、网站名称字段,完成全量数据对齐
  • 对齐后按Name列字段做排序分组,导出结果即可
实现代码

首先安装依赖库:
pip install pandas

注意:

  • 处理前建议备份原始CSV文件,避免误操作导致数据丢失
  • 如果你的CSV文件是GBK/GB2312编码,读取时需要在pd.read_csv()中增加encoding="gbk"参数;导出时用utf-8-sig编码可以保证Excel打开中文不乱码。
import pandas as pd

# 替换为你的原始CSV文件路径
df = pd.read_csv("your_raw_file.csv", dtype=str).fillna("")

# 初始化缓存变量
cache_type = ""
cache_monitor_item = ""
cache_site_name = ""
result_rows = []

# 位置信息关键词,可根据实际业务数据增删调整
position_keywords = ["北京", "上海", "广州", "深圳", "杭州", "机房", "节点", "电信", "联通", "移动", "教育网"]

for _, row in df.iterrows():
    col_a = row.iloc[0].strip()
    col_b = row.iloc[1].strip()
    col_c = row.iloc[2].strip()

    # 更新类型、监控项缓存
    if col_a:
        cache_type = col_a
    if col_b:
        cache_monitor_item = col_b

    # 判断当前C列内容是否为有效网站名称
    is_valid_site = True
    if not col_c:
        is_valid_site = False
    else:
        for kw in position_keywords:
            if kw in col_c:
                is_valid_site = False
                break

    if is_valid_site:
        cache_site_name = col_c
        # 写入网站名称行数据
        current_row = {
            df.columns[0]: cache_type,
            df.columns[1]: cache_monitor_item,
            df.columns[2]: col_c
        }
        # 自动补全其余所有列的原始数据
        for col in df.columns[3:]:
            current_row[col] = row[col]
        result_rows.append(current_row)
    else:
        # 写入位置附属行数据,补全关联字段
        current_row = {
            df.columns[0]: cache_type,
            df.columns[1]: cache_monitor_item,
            df.columns[2]: f"{cache_site_name}-{col_c}" if col_c else cache_site_name
        }
        # 自动补全其余所有列的原始数据
        for col in df.columns[3:]:
            current_row[col] = row[col]
        result_rows.append(current_row)

# 转为结构化数据表
clean_df = pd.DataFrame(result_rows)
# 按Name列排序,需要多字段排序可传入列表,比如by=[df.columns[0], df.columns[2]]即为先按类型再按名称排序
sorted_df = clean_df.sort_values(by=df.columns[2], ascending=True, ignore_index=True)
# 导出处理完成的文件
sorted_df.to_csv("sorted_result.csv", index=False, encoding="utf-8-sig")
自定义调整说明
  • 可根据实际数据特征修改position_keywords列表的关键词,确保能准确区分网站名称和附属位置信息
  • 代码自动兼容3列以上的CSV结构,不需要额外修改即可保留所有原始列的数据
  • 调整sort_values的by参数和ascending参数,可以自定义排序的字段和升降序规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 05:15:40